Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia Tuesday TopDrive KupDnes Navrcholu Bomba NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Reference v novém PHP

Před časem vyšlo PHP 4.4.0 a 5.0.5, před vydáním je verze 5.1.0. Asi nejviditelnější oprava v těchto verzích se týká práce s referencemi. Přestože jsou v dokumentaci od prosince 2000 popsány tři povolené způsoby předávání parametrů referencí, PHP vždy nekontrolovalo, jestli není použit jiný způsob.

Zavolat např. asort(array(3)) tak možné nebylo, ale zavolat asort(my_arra­y(3)), kde my_array() vrací úplně to stejné pole, šlo.

Vzhledem k tomu, že tento nedokumentovaný způsob volání mohl způsobit neoprávněný přístup do paměti a tím i pád PHP, bude postupně zakázán. V PHP 4.4.0 generuje E_NOTICE, v pětkové řadě potom rovnou fatální E_ERROR.

Je tedy nejvyšší čas projít si kód a nepodporovaná volání opravit. Pokud se výsledek funkce má předávat referencí, je nutné funkci zapsat jako function &my_array(), u vlastních funkcí přijímajících parametry referencí stojí za zvážení, zda je nelze přijmout normálně hodnotou. Řada programátorů totiž parametry předává referencí pouze kvůli domněnce, že ušetří jedno kopírování dat, ale vzhledem k tomu, že PHP kopíruje parametry předané hodnotou až v okamžiku, kdy dojde k jejich změně, je tato domněnka lichá.

Z mnoha míst jste možná slyšeli, že tyto verze nejsou zpětně kompatibilní. Ale vzhledem k tomu, že pouze zakazují nepodporovaný způsob psaní kódu, o kterém dokumentace jasně říká, že chování je v tomto případě nedefinované, tak se o zpětně nekompatibilní změnu podle mého názoru nejedná.

Tato zprávička byla zaslána čtenářem serveru Root.cz pomocí formuláře Přidat zprávičku. Děkujeme!

Předchozí zprávička Následující zprávička        
Indigo
Indigo (neregistrovaný)
19. 9. 2005 8:10 Nový

Umh ?

celé vlákno
"Ale vzhledem k tomu, že pouze zakazují nepodporovaný způsob psaní kódu, o kterém dokumentace jasně říká, že chování je v tomto případě nedefinované, tak se o zpětně kompatibilní změnu podle mého názoru nejedná."

Ja bych rekl ze ta zmena je zpetne kompatibilni. Coz se asi snazi rict i autor. Akorat se mu asi nak vymknula ta negace zaporu ....
Jakub Vrána aura:61
19. 9. 2005 10:42 Nový

Re: Umh ?

celé vlákno
Je to tak, má tam být samozřejmě "o zpětně NEkompatibilní změnu se nejedná".
Petr Krčmář aura:99
19. 9. 2005 11:42 Nový

Re: Umh ?

celé vlákno
No, to je docela rozdíl :-). Opraveno.
Zasílat nově přidané příspěvky e-mailem        

Přehled názorů

Umh ?
Indigo 19. 9. 2005 08:10
└ 
Re: Umh ?
Jakub Vrána 19. 9. 2005 10:42
 
└ 
Re: Umh ?
Petr Krčmář 19. 9. 2005 11:42