A PHP 5-ös verziójának megjelenése óta (2004) számos hibajavításon esett át, de lényeges verzióváltásra sokáig nem került sor.
2005-ben elindult egy kísérleti projekt a PHP 6, melynek a Unicode-támogatás volt a célkitűzése, de a technikai nehézségek miatt 2010-ben felhagytak a fejlesztésével, és a fontosabb eredmények a PHP 5 részei lettek. Ez idő alatt a PHP 6 bekerült a köztudatba, és számos ezzel kapcsolatos könyv jelent meg. Így az új verzió megjelenése előtt a fejlesztőcsapat egy érdekes választás elé került, hogy milyen jelöléssel induljon a mostani kiadás. Végül is mindent összevetve úgy döntött, hogy kihagyja a 6-os verziószámot, és az új kiadást PHP 7 néven fogja elindítani.
A PHP 7, a PHP nyelv eddigi történetének egyik legjelentősebb frissítése, melynek végleges kiadására 2015 decemberéig kellett várni. Mára már számos cikk, elemzés, sebességteszt jelent meg a 7.0, és a 7.1-es verzióval kapcsolatban.
Miért érdemes váltani PHP 7-re, és mik a buktatói
A PHP 7 legalább kétszer olyan gyors, mint a korábbi verziók
A PHP-t mindig is kritizálták a teljesítményével kapcsolatban. A PHP gyenge teljesítménye miatt 2011-ben a Facebook létrehozott egy virtuális PHP futtató környezetet a HHVM-et, hogy maximalizálja a PHP alapú alkalmazások teljesítményét. A HMVH futás közbeni fordítással növeli a PHP nyelv sebességét. Látván a Facebook e téren elért eredményeit a PHP fejlesztők is elkezdtek ehhez hasonló megoldásokat keresni, és elindították saját kísérleti projektjüket amely a PHP Next Generation nevet kapta (PHPNG). Ez a projekt arra vállalkozott, hogy teljesen újraírja a Zend Engine 2 PHP futtatókörnyezetet. A PHPNG lett a PHP 7 alapja, így ennek megfelelően a PHP 7 alatt Zend Engine 3 dolgozik. A hivatalos teljesítmény tesztek alapján a PHP 7 legalább 2-szer gyorsabb, mint a PHP 5.x. Ez nem csak gyorsítja a kód futását, hanem kevesebb kiszolgálót igényel, csökken a szerverek leterhelése.
A lenti táblázat jól szemlélteti, hogy mennyivel több kérést tud ugyan annyi idő alatt elvégezni a PHP 7, mint a korábbi társai, és a WordPress teszt alatt közel olyan teljesítménnyel dolgozik, mint a Facebook HHVM (sok más esetben még gyorsabb is, érdemes a teljes tesztet megnézni). A WordPress alapú weboldalak esetén a PHP 7 gyakorlatilag több, mint 120%-os teljesítménynövekedést hoz.
Forrás: http://talks.php.net/fluent15#/wpbench
A képre kattintva a teljes teszt megtekinthető a talks.php.net weboldalon.
A zend.com-on látványosan megtekinthető, hogy az egyes CMS rendszerek sebessége hogyan javul a PHP 7 alatt: https://www.zend.com/en/resources/php7_infographic
Az elavult eszközök eltávolításra kerültek a PHP 7-ből
Elég hosszú a lista, hogy mi változott. Sok korábban elavultnak jelölt eszközt véglegesen eltávolítottak, vagyis aki még ilyen kódot használ, akkor a forráskódot alaposan át kell írnia! Például a következő ASP és script PHP tag-ek eltávolításra kerültek, így már a hetes verziótól nem használhatók (<% … %>, <%= … %>, <script language=”php”> … </script>) – Elfogadott <?php … ?> php inicializáló jelek.
Ha átállás során hiba történik, akkor először mindenképpen ellenőrizni kell, hogy a PHP 7 támogatja-e az adott szintaxist. Lásd: http://php.net/manual/en/migration70.incompatible.php
Új szintaktikai elemek
A teljesítmény növelésének érdekében bevezetésre került az AST – azaz Abstract Syntax Tree, mely lehetővé teszi a kód optimalizálását futás közben is, valamint bevezetésre került a Uniform Variable Syntax. Utóbbi célja, hogy egységesítse a változók kezelését, és megszüntesse a kifejezések értelmezése során fellépő eltéréseket.
A PHP 5-ben a fordító általában balról jobbra értelmezi a kifejezést, néhány speciális esetet kivéve, amikor a változók jobbról balra kerülnek kiértékelésre. Az új szintaxis bevezetésével a PHP 7-ben megszűnnek ezek a kivételek. Minden php kifejezés balról jobbra kerül értelmezésre.
A következő példa nagyon jól szemlélteti az eltérést:
<?php
class keszlet{
public $zoldseg = 'sárgarépa';
public $netto = 200;
}
$keszlet = new keszlet();
$aru = [ 'neve' => 'zoldseg', 'ar' => 'netto' ];
$brutto = $keszlet->$aru['netto'] * 1.27;
echo 'A ' . $keszlet->$aru['neve'] . 'bruttó ára: ' . $brutto;
?>
Az eredmény PHP 5 alatt : A sárgarépa bruttó ára: 254,- Ft
Az eredmény PHP 7 alatt: A bruttó ára: 0,- Ft
+ a következő hibaüzenettekkel fogunk találkozni :
PHP Notice: Array to string conversion in …., miszerint a tömböt nem lehet szöveges típussá alakítani
PHP Notice: Undefined property: keszlet::$Array in …
A PHP 5 alatt azért nem volt hiba, és megfelelő eredményt kaptunk, mert az értelmező kiolvasta az aru tömb értékét (pl. zoldeseg), és valójában a $keszlet->zoldseg került meghívásra.
Támogatottság
Jelenleg a PHP 5.6 kiterjesztett támogatással rendelkezik, 2018. december 31-ig készül hozzá biztonsági frissítés, de nincs több hibajavítás, 2017. január 19-el leálltak a fejlesztéssel. A korábbi verziók már nem támogatottak, a PHP fejlesztőinek ajánlása szerint ezeket a lehető leghamarabb frissíteni kell, mivel nem jelentett biztonsági réseket tartalmazhatnak. Minél régebbi PHP verzión fut az adott weboldal, annál sebezhetőbb, és jelentősebb biztonsági kockázattal jár.
A honlap biztonsága érdekében érdemes minimum PHP 5.6-ra váltani.
Forrás: http://php.net/supported-versions.php
A képre kattintva a teljes verzió támogatottsági táblázat megtekinthető a php.net weboldalon.
Jelenleg csak a PHP 7.0-nak, valamint a 7.1-nek van aktív támogatása.
Összegzés
Az új verzió mellett szól a magas teljesítmény, támogatottság, és az új szintaktikai elemek tárháza. Viszont mindent összevetve az átállásnak vannak buktatói, a PHP 7-ből több olyan elem is kikerült, ami a korábbi verzióban már nem volt támogatott, de még használható volt a forráskódban. Éppen ezért az átállást először mindenképpen tesztkörnyezetben végezzük, ne az éles oldalon! Amennyiben vannak olyan régi bővítmények amik megakasztják a weboldal működését, akkor érdemes azokat lecserélni, vagy megvárni amíg felkészítik PHP 7-re.
Ha minden funkció megfelelően működik, és a tárhely szolgáltató is fel van készülve az átállásra, akkor semmi akadálya, hogy egy kis plusz sebességgel turbózzuk fel a honlapunkat.