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.