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_ERROR szintű 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_ERROR szintű 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 goto konstrukció 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: a break kulcsszó kiterjesztésével hoznak létre a hírhedt goto-éhoz hasonló funkcionalitást. A break viszont 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!";
    
  • foreach tö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 import kulcsszó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.