PHP 5.4

Még októberben egy másik blogba volt szerencsém egy hosszabb bejegyzést írni az akkor még elég brékingnek számító PHP 5.4 újdonságairól. Az a blog zártkörű, de a bejegyzést most itt is közölhetem, illetve, azóta foglalkoztam is jó pár órát az 5.4-gyel, és gondoltam összeírom a tapasztalatokat.

Március elsején jelent meg a PHP 5.4.0, amely a PHP hivatalos oldalán letölthető és kipróbálható, Windowsra van kész változat, illetve például OS X-re is lehet ilyesmit találni, ha az ember nem akar maga fordítani (én nem szeretek). Az új verzió főként nyelvi változtatásokat, hibajavításokat és tucatnyi elavult, deprecated funkció takarítását hozta. Lássuk, mik ezek az újdonságok.

Traitek

A trait voltaképpen egy viselkedésminta, amely a horizontális újrahasznosítást segíti elő. Ez így egy nagyon tudományosan megfogalmazott mondat, de mit is jelent vaójában? A trait voltaképpen egy osztály és egy interfész keveréke. Viselkedésmintát (akár komplett metódusokat és osztályváltozókat) írhatunk le benne, majd egy osztály vagy akár maga egy trait felhasználhat több ilyet. Fontos megjegyezni, hogy az instanceof segítségével nem tudjuk ellenőrizni, hogy egy osztály rendelkezik-e valamelyik viselkedésmintával, azonban a ReflectionClass::getTraitNames(); metódusa egy tömbbel tér vissza, amely a megvalósított viselkedésminták megnevezéseit tartalmazza. Itt jegyezném meg, hogy nem árt kerülni, mivel – mint ahogyan azt láthattuk korábban – a ReflectionClass elég költséges mutatvány.

A viselkedésmintákról további információk itt olvashatók.

Tömbök

Persze, nem a tömbök megjelenése jelenti az újdonságot, hanem néhány hasznos változtatás ezen a területen. Talán a legfontosabb, hogy mostmár a metódushívásból érkező tömbök elemeire közvetlenül is hivatkozhatunk. A deklarálás és feltöltés is sokkal egyszerűbb lett; az array(); meghívása nélkül, szögletes zárójelben felsorolva is inicializálhatjuk a tömböt.

Callback metódusok kényelmesebben hívhatók

Nem kell a call_user_func(); metódushoz nyúlnunk, ha valami hasonlót szeretnénk:

Feltöltés adatai, megszakítása

Könnyedén kinyerhetünk egy feltöltéssel kapcsolatos minden információt, így sokkal egyszerűbb például a feltöltést állapotát százalékban, vagy mondjuk a hátralévő időt egy AJAX-szkript segítségével jelezni.

Beépített webszerver

Tesztelésre kiváló lehet, illetve ha csak gyorsan szeretnénk megnézni valamit, Apache vagy bármely más webszerver telepítése nélkül:

php -S localhost:8080 -t /var/www

A -S (ne keverjük a kisbetűs változatával) kapcsolóval kérhetjük, hogy szerverként fusson a PHP, majd a hosztot és portot megadva a -t kapcsolóval még a home könyvtárat is beállíthatjuk.

A webszerverrel játszottam a legtöbbet, az a személyes tapasztalatom, hogy nagyon jó ötlet, hosszú távon, ha nem hanyagolják el a fejlesztést, praktikus lehet, és amennyire meg tudom ítélni, terheléselosztás tekintetében nagyon praktikus ez a felállás, lásd a »Play! Framewor« példáját.

Mire jó? Tesztelni. Kipróbálni gyorsan valamit, lefuttatni gyorsan valamit, belőni egy gyorsan elérhető PHP-t, ami fut. Konkrét webes projektjeimet nagyon nehézkesen bírtam működésre, látszik, hogy sokkal inkább az Apache-hoz szocializálódtunk.

Mire lehet jó még? Személy szerint egy fájlfeltöltő rendszert terveznék alá, egészen konkrétan egy képkezelőt. Akármilyen img.valami.tld, szépen beállítva, hogy az oda érkező kéréseket egy PHP 5.4-es szerver szolgálja ki, és könnyedén megtudhatunk a feltöltésről minden információt (hol tart, mi a státusza, akármi), a PHP 5.4-re frissítése nélkül. (Ami persze jó lenne, ha kötelező lenne, de a gyakorlatban tudjuk és látjuk, hogy sokszor még az 5.2-t sem lehet eldobni.)

Egyéb, nem elhanyagolható apróságok

Bináris számformátum

A 0b prefixszel már közvetlenül dolgozhatunk bináris számokkal.

Jobban támogatott multibájt

A multibájt funkciók engedélyezéséhez már elegendő a php.ini fájlban módosítani a zend.multibyte opciót.

Hibajavítások, optimalizálások

Gyorsabb, szebb és okosabb a PHP 5.4, rengeteg hibajavítást és optimalizálást hajtottak végre. Nem mértem, de tervezem.

Csendesebb @csendes operátor

Valószínűleg ennek is rengetegen örülnek: a @ operátor működése sokkal gyorsabb lett. Ennek oka egyszerű: nem két ini_set() fut le a háttérben, illetve a generált opkód mérete is sokkal kisebb.

JIT-alapú lett a $GLOBALS
A változó már csak akkor kerül inicializálásra, ha hivatkozunk arra. Teljesítményjavításnak kiváló, azonban érdemes odafigyelni a különböző PHP accelerator megoldásokra, ezeknek lehet vele problémájuk.

Viszlát, register_globals!

A vonatkozó ini-beállítások megszűntek, hasonlóképpen a register_long_arrays, a “csökkentett mód” és a magic quotes is erre a sorsra jutott. Érdekesség továbbá, hogy az E_STRICT is megszűnik, beolvasztották az E_ALL-ba.

Végezetül

Rengeteg hasznos újdonságot, kényelmes módosítást és a még tökéletesebb működést elősegítő fejlesztést tartalmaz a PHP 5.4. Mostantól kezdjünk el csúnyán nézni azokra, akik megkérdezik tőlünk, hogy PHP 5.2 elegendő-e egy szerveren. Nem, nem elegendő, hajtani és küzdeni kell, hogy a régi PHP 5.2-es kódok legalább az 5.3-as szintet elérjék (onnan egyébként kis lépcső az 5.4). A migrálás nem nehéz, egy általános symfony 1.4-ben készült kód például zökkenőmentesen megy tovább 5.4 alatt, érzésre gyorsabban is (de erre mérget nem veszek, mert minimálisan sem jártam utána, hogy tényleg így van-e).

Szóval ezek vannak, érdemes kísérletezgetni. A traitekre sokan csúnyán néznek, mondván az OOP elmélet kiherélése, de rengeteg példát tudok, amikor hasznos lehet.

Töltsétek, nézzétek, írjátok, használjátok, szeressétek. Megéri, jó móka.

« »

mefiblog logó

Írja és rendezi Mefi, avagy Nádai Gábor © 2005-2024

A blogot büszkén pörgeti a WordPress motorja, Anders Norén sablonjának átbuherált változatával.