Reference v novém PHP

Redakce 19. 9. 2005

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!

Našli jste v článku chybu?
DigiZone.cz: Vláda schválila digitální vysílání ČRo

Vláda schválila digitální vysílání ČRo

Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

DigiZone.cz: Evropa 2: od září nové vedení

Evropa 2: od září nové vedení

Měšec.cz: Test: Výběry z bankomatů v cizině a kurzy

Test: Výběry z bankomatů v cizině a kurzy

Měšec.cz: Kurzy platebních karet: vyplatí se platit? (TEST)

Kurzy platebních karet: vyplatí se platit? (TEST)

Vitalia.cz: 9 potravin, které nesmí chybět v jídelníčku těhotné

9 potravin, které nesmí chybět v jídelníčku těhotné

Lupa.cz: Sdílíte veřejně běhání a jízdu na kole?

Sdílíte veřejně běhání a jízdu na kole?

Měšec.cz: Co s reklamací, když e-shop krachuje?

Co s reklamací, když e-shop krachuje?

Podnikatel.cz: Novela zákoníku práce. Řeší homeworking

Novela zákoníku práce. Řeší homeworking

Lupa.cz: Co najdete uvnitř kosmické sondy?

Co najdete uvnitř kosmické sondy?

Lupa.cz: Samořídicí taxíky jsou tu. Začíná s nimi Uber

Samořídicí taxíky jsou tu. Začíná s nimi Uber

DigiZone.cz: ČTÚ zveřejnil aktualizovaný D-Book

ČTÚ zveřejnil aktualizovaný D-Book

Podnikatel.cz: Týká se vás EET? Chtějte od berňáku posudek

Týká se vás EET? Chtějte od berňáku posudek

Podnikatel.cz: Pozor na vykuky, imitují služby České pošty

Pozor na vykuky, imitují služby České pošty

Lupa.cz: Olympiáda zakázala GIFy. Moc to nepomáhá

Olympiáda zakázala GIFy. Moc to nepomáhá

Lupa.cz: Elektronika tajemství zbavená. Jak s ní začít?

Elektronika tajemství zbavená. Jak s ní začít?

Vitalia.cz: „Sjíždět“ porno není bez rizika

„Sjíždět“ porno není bez rizika

Podnikatel.cz: Kauza z Vinohrad pokračuje. Policie se omlouvá

Kauza z Vinohrad pokračuje. Policie se omlouvá

Vitalia.cz: Ženy, které milují příliš, jsou neštěstí

Ženy, které milují příliš, jsou neštěstí

Měšec.cz: Investiční pasti. Děláte to, co ostatní, ale proděláváte

Investiční pasti. Děláte to, co ostatní, ale proděláváte