PHP 6
Nem kérdés: a legtöbb webfejlesztő álmai között kiemelkedő helyen szerepel az új PHP változat – szám szerint a hatodik – megjelenése. De mégis: kevesen vannak teljesen tisztában azzal, hogy pontosan mit is várhatnak a PHP 6-tól. Ebben a cikkben megpróbálom emészthető formában összefoglalni az új verzió nyújtotta legfontosabb lehetőségeket:
1. Unicode
A PHP fejlesztői által elkövetett legnagyobb hiba talán az volt, hogy figyelmen kívül hagyták azt a változatos nyelvű/nemzetiségű környezetet, amelyben a PHP működik. A Unicode-sztringek kezelése eddig csak az mb_string kiterjesztésen keresztül volt lehetséges, ami viszont nem minden webszerveren vehető igénybe (arról nem is beszélve, hogy használata pluszkóddal/pluszmunkával jár). Szükség volt egy beépített, transzparens Unicode-implementációra. A fejlesztők választása az ICU (International Components for Unicode) nevű kipróbált kódkönyvtárra esett. A végső cél: a kódkönyvtár segítségével elérni, hogy minden sztring-kezelő függvény és operátor Unicode-biztossá váljon. A munka jól halad, egyetlen probléma van: az új Unicode-megoldást használva az alkalmazások kb. 25%-kal lassabbak lettek :-/.
2. Tisztogatás
- register_globals, magic_quotes — Sokan megkérdőjelezték már ezen funkciók létjogosultságát az elmúlt években. Most megtörtént a nagy áttörés: a hatos verziótól kezdődően mindkét – súlyos biztonsági kockázatokkal járó – funkció el fog tűnni. Használatuk a PHP elindításakor
E_CORE_ERRORszintű hibát fog okozni, tehát a szkript le sem fut; csak egy üzenet jelenik majd meg, ami figyelmeztet a használni kívánt funkció veszélyeire, illetve a biztonságos programozás fontosságára. - safe_mode — A nevéhez méltatlanul a safe_mode gyakorlatilag soha nem volt képes biztonságosabbá tenni a PHP használatát, így szerintem senki nem csodálkozik, ha azt mondom: ettől is megszabadultak a fejlesztők. Használatakor szintén
E_CORE_ERRORszintű hibát kapunk. (Ennek ellenére hasznosnak ítéltetett az open_basedir funkcionalitása, így ez megmarad.)
3. A Zend motor kiegészítései
- 64-bites egészek — Döntés született arról is, hogy a már meglévő 32-bites integer típus mellé (tehát nem helyette!) szükség van egy 64-bites változatra is. Az új típus neve – meglepő módon – int64. Persze felmerül a kérdés: hogyan közöljük a motorral, hogy nekünk 64-bites integerre van szükségünk az alapértelmezett 32 helyett? A megoldás a változó típusának explicit meghatározása:
$bigInteger = (int64) 123456;
- goto — Valószínűleg webes fórumok tucatjai lettek tele prokkal és kontrákkal a
gotokonstrukció PHP-s megvalósítását illetően. A fejlesztők végül egy igen kreatív ötlettel álltak elő ebben a nehéz kérdésben: abreakkulcsszó kiterjesztésével hoznak létre a hírhedtgoto-éhoz hasonló funkcionalitást. Abreakviszont továbbra is csak ciklusok és feltételes szerkezetek belsejében lesz használható, így csak ezekből lehet majd kiugrani egy adott címkére. Szemléltetésképpen:if (true) { // Itt fogjuk magunkat, és hopp kiugrunk: break blah; } echo 'Ez a szöveg soha nem jelenik meg.'; blah: echo "Ide ugrottunk!"; foreachtöbb dimenziós tömbökön — Egy apró, bár érdekes kiegészítés. Mostantól használható az alábbi szintaxis többdimenziós tömbökre alkalmazva:$a = array(array(1, 2), array(3, 4)); foreach( $a as $k => list($a, $b)) { // ...Itt játszunk az adatokkal... }
4. OOP
- Névterek — Sokan zavarónak találták, hogy a PHPben nincsenek névterek. Több lehetséges megoldás közül végül ez lett a nyerő:
namespace Foobar { const testconst = 'xyz'; function testfunc() { ... } class testclass { function abc() { ... } } } // Lehetséges használati mód pl.: A\\testclass::abc(); // Így lehet majd importálni: import A\\*;Tehát:- Lesz egy namespace kulcsszó, amivel névterek hozhatóak létre.
- A névtereken belül osztályok, függvények és konstansok helyezkedhetnek majd el, változók nem.
- A névtér-operátor valószínűleg a '\' (backslash, visszaper) karakter lesz.
- Az
importkulcsszóval lehet majd az alapértelmezett (név nélküli) névtérbe helyezni egy névtér tartalmát.
- Függvények visszatérési típusa — Ezentúl lehetőség lesz jelezni a motor számára, hogy egy függvény visszatérési értéke pontosan milyen típusú objektum is lesz. Valószínűleg az alábbi megoldások közül fognak a fejlesztők kiválasztani egyet:
function ObjectName &funcname(); function &ObjectName funcname(); function &funcname ObjectName(); ObjectName function &funcname(); function &funcname() returns ObjectName;
Aki idáig eljutott annak gratulálok, remélem mindenki számára tudtam némi újdonsággal szolgálni. A fentebb említett funkciókat a fejlesztők folyamatosan építik be a PHP kódjába. Hogy a folyamat hol tart, arról nem tudok nyilatkozni; de ha valaki még ezután a cikk után is információra éhes, annak ajánlom a PHP levelezési listákat.
