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.


Hm, ahelyett, hogy inkább a beépített típusokat varázsolnák objektum-szerűvé inkább telitűzdelik ilyen felesleges dolgokkal, mint a névterek. No de lesz ez még ígyse, inkább nekiállok rendesen megjavítani a listákon belüli kódblokkokat, mert a délutáni hotfix nemteljesen hozta rendbe... :)
Jah, igen, azt akartam kérni, thx :)...
akkor ez a goto dolog olyan lesz, mint a kivételek? ha igen, mi az értelme, ha nem akkor miben különbözik?
Kivételeknél a throw utasításnál megszakad a program futása és ha az adott kód nincs benne egy try {} blokkban, akkor le is hal a program (ellenkező esetben egy megfelelő catch () {} blokkban folytatódik a futása).
Goto esetén pedig csak a kód egyik helyéről a másikra ugrunk és onnan folytatódik a futás. Pl. egy goto ciklus:
$i = 1;loop:
if ($i > 10) {
goto exit;
}
echo $i.". lefutás\n";
++$i;
goto loop;
exit:
echo "vége a ciklusnak\n";
a goto utasításoknál megszakad a program futása és ha az adott címke nem található a programban, akkor le is hal.
remélem érted a célzást, mindent lehet jól és rosszul használni. egyébként az el nem kapott kivételeket is le lehet kezelni.
azt látom, hogy nem mai darab a cikk, ma is érvényes még, amit a goto parancsról írtatok? mert ott az áll, hogy nem lesz goto, csak a break-et terjesztik ki. vagy lesz goto is és a break-et is kiterjesztik?
bocs a tudatlanságomért, de én annyira utálom a goto parancsot, hogy nem igazán követtem a sorsát.
hoppá, lehet hogy egy </blockquote> lemaradt...
Nem nagyon találtam a témában friss információt, esetleg a http://snaps.php.net/ -ről le tudsz rántani egy PHP 6-ot és ki tudod próbálni, hogy mi működik és mi nem. Ha egyáltalán működőképes és implementálták már bele ezt a goto (vagy break kiterjesztés) dolgot.
kriz:
Okoska, dolgozzál már névterek nélkül egy rohadt nagy rendszerben...
Teszem ezt évek óta. Ahogyan sokan mások is. Valahogy eddig is születtek elég nagy alkalmazások PHP nyelven... vajon azt hogy csinálták?
Vajon hogyan képesek operációs rendszer méretű "rohadt nagy" programokat fejleszteni C nyelven, hiszen ott nincsenek is névterek?
Persze, rendezettebb lehet tőle a kód, vagy akár szebb is (bármennyire is nem tudok azonosulni ezzel a jelölésmóddal), de messze nem életbevágóan fontos.
Azért azt, hogy a safe_mode nem ért semmit, kissebb túlzásnak nevezném...