Jakiś czas temu pojawiła się maszyna do vagranta z zainstalowanym jednym z pierwszych wydań php7, jednakże dziś światło dzienne ujrzała pierwsza oficjalna Alpha.
Jeśli kogoś interesuje lista zmian to można znaleźć ją tutaj: https://github.com/php/php-src/blob/php-7.0.0alpha1/NEWS oraz https://github.com/php/php-src/blob/php-7.0.0alpha1/UPGRADING
Można go oczywiście pobrać i przetestować już dziś, linki do downloadu: https://downloads.php.net/~ab/ oraz wersja dla Windows: http://windows.php.net/qa/, tam jednak żeby zaczęło działać trzeba mieć apache kompilowane VC14, czyli najnowszą jego wersje najlepiej. Oraz pobrać brakujący dll ponieważ nie został on umieszczony w paczce php: http://windows.php.net/downloads/snaps/ostc/69801/vc14/
Co nowego, skrócona lista:
<?php function add(int $a, int $b): float { return $a + $b; } http://www.php.net/var_dump(add(1,2)); //float(3)
<?php function add(int $a, int $b): int { return (string) $a + $b; } http://www.php.net/var_dump(add(1,2)); //int(3)
<?php function add(int $a, int $b): string { return (string) $a + $b; } http://www.php.net/var_dump(add(1,2)); //string(1) "3"
<?php function add(int $a, int $b): http://www.php.net/array { return (http://www.php.net/array) $a + $b; } http://www.php.net/var_dump(add(1,2)); // Fatal error: Uncaught EngineException: Unsupported operand types
$i = 1; http://www.php.net/var_dump(new class($i) { public function __construct($i) { $this->i = $i; } }); //object(class@anonymous)#1 (1) { ["i"]=> int(1) }
$x = NULL; $y = NULL; $z = 3; http://www.php.net/var_dump($x$y
$z); //int(3)
http://www.php.net/var_dump(23 ? 4 : 5); //int(4)
http://www.php.net/var_dump(0 || 23 ? 4 : 5); //int(4)
http://www.php.net/echo 1 <=> 1; // 0 http://www.php.net/echo 1 <=> 2; // -1 http://www.php.net/echo 2 <=> 1; // 1 http://www.php.net/echo [] <=> []; // 0 http://www.php.net/echo [1, 2, 3] <=> [1, 2, 3]; // 0 http://www.php.net/echo [1, 2, 3] <=> []; // wdg dokumentacji oczekiwane 1 a otrzymujemy 3 http://www.php.net/echo [1, 2, 3] <=> [1, 2, 1]; // 1 http://www.php.net/echo [1, 2, 3] <=> [1, 2, 4]; // -1
Wygląda nieźle, ciekawe jak z planem wdrożenia. Na niektórych hostingach nadal króluje 5.3
Szkoda, że strict mode nie jest obowiązkowy, a jedynie opcjonalny
nie jest obowiązkowy, by zachować kompatybilność wstecz w miarę możliwości, ale nie wymaga dodatkowe aktywowania, jak było w propozycji, co ma swoje plusy i minusy bo czasem może powstać spaghetti jak to bd mieszać
Swoją drogą trzeba bd zaktualizować skrypt forum by nie zamieniał null coalescing operator na emotikon, bo zapomniałem wyłączyć emotikony a nie da się edytować
https://github.com/tpunt/PHP7-Reference
Wiecej w temacie
Orientujecie sie jakie typy danych sa/beda dozwolone w strict mode?
Tylko int, float, bool i string? Co z pozostalymi? char? resourcami? tablicami?
https://wiki.php.net/rfc/scalar_type_hints_v5
https://wiki.php.net/todo/php70#timetable
Dzisiaj rospisali daty końcowych wersji RC
Jeszcze tylko brakuje daty wydania docelowego php 7.1
http://php.net/manual/en/migration70.php
Polecam przejrzeć, według mnie czytelniej opisane niż wszelkie ich Changelogi/Todo które udostępnili zanim dokumentację zrobili.
Jednak jeszcze nie da się wejść używając polskiej wersji językowej bo 404 zwraca ale to chyba nie problem :-)
Dodam tylko, że skok wydajnościowy jest relatywnie spory (PHP7 kompilowałem w lipcu), dla przykładu:
$limit = 20; $A = [2.7, 3.2, 2.7]; $B = [3.238, 2.788, 3.007]; for($i=0; $i<$limit; $i++) for($k=0; $k<$limit; $k++) for($j=0; $j<$limit; $j++) for($x=0; $x<$limit; $x++) for($y=0; $y<$limit; $y++) for($z=0; $z<$limit; $z++) { $b = $i+$k+$j+$x+$y+$z; $w = []; $w[] = $i*$A[0] + $x*$B[0]; $w[] = $k*$A[1] + $y*$B[1]; $w[] = $j*$A[2] + $z*$B[2]; if (http://www.php.net/min($w)>$b) { http://www.php.net/echo $i.' '.$k.' '.$j.' '.$x.' '.$y.' '.$z.' = '.$b.', w = '.http://www.php.net/min($w).PHP_EOL; if (http://www.php.net/min($w)-$b>$win) { $win = http://www.php.net/min($w)-$b; $s = [$i,$k,$j,$x,$y,$z]; } } }
Faktyczne bardzo duży skok. Nic tylko przesiadać się
03 Dec 2015
PHP 7.0.0 Released
https://secure.php.net/archive/2015.php#id2015-12-03-1
W końcu
W końcu! Teraz migrować
<?php function add(int $a, int $b): float { return $a + $b; } http://www.php.net/var_dump(add(1,2)); //float(3)
<?php function add(int $a, int $b): int { return (string) $a + $b; } http://www.php.net/var_dump(add(1,2)); //int(3)
<?php function add(int $a, int $b): string { return (string) $a + $b; } http://www.php.net/var_dump(add(1,2)); //string(1) "3"
<?php function add(int $a, int $b): http://www.php.net/array { return (http://www.php.net/array) $a + $b; } http://www.php.net/var_dump(add(1,2)); // Fatal error: Uncaught EngineException: Unsupported operand types
$i = 1; http://www.php.net/var_dump(new class($i) { public function __construct($i) { $this->i = $i; } }); //object(class@anonymous)#1 (1) { ["i"]=> int(1) }
$x = NULL; $y = NULL; $z = 3; http://www.php.net/var_dump($x$y
$z); //int(3)
http://www.php.net/var_dump(23 ? 4 : 5); //int(4)
http://www.php.net/var_dump(0 || 23 ? 4 : 5); //int(4)
http://www.php.net/echo 1 <=> 1; // 0 http://www.php.net/echo 1 <=> 2; // -1 http://www.php.net/echo 2 <=> 1; // 1 http://www.php.net/echo [] <=> []; // 0 http://www.php.net/echo [1, 2, 3] <=> [1, 2, 3]; // 0 http://www.php.net/echo [1, 2, 3] <=> []; // wdg dokumentacji oczekiwane 1 a otrzymujemy 3 http://www.php.net/echo [1, 2, 3] <=> [1, 2, 1]; // 1 http://www.php.net/echo [1, 2, 3] <=> [1, 2, 4]; // -1
Czy Xampp/Lampp 7.0.8 to ostatnia wersja 32 bitowa tego serwera?
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)