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?
120na80.cz: Bonbon si schovejte na přistání

Bonbon si schovejte na přistání

Měšec.cz: Banky umí platby na kartu, jen to neříkají

Banky umí platby na kartu, jen to neříkají

Měšec.cz: Se stavebkem k soudu už (většinou) nemusíte

Se stavebkem k soudu už (většinou) nemusíte

Měšec.cz: Udali ho na nelegální software a přišla Policie

Udali ho na nelegální software a přišla Policie

Podnikatel.cz: Daňové složenky? U daně z příjmů se nechytly

Daňové složenky? U daně z příjmů se nechytly

Lupa.cz: eIDAS: Nepřehnali jsme to s výjimkami?

eIDAS: Nepřehnali jsme to s výjimkami?

Lupa.cz: IT scéna po brexitu: přijde exodus vývojářů?

IT scéna po brexitu: přijde exodus vývojářů?

Vitalia.cz: Tohle je Břicháč Tom, co zhubnul 27 kg

Tohle je Břicháč Tom, co zhubnul 27 kg

Podnikatel.cz: Místa, kde hází podnikání klacky pod nohy

Místa, kde hází podnikání klacky pod nohy

Lupa.cz: Největší torrentový web KickassTorrents padl

Největší torrentový web KickassTorrents padl

Lupa.cz: Japonská invaze. Proč SoftBank kupuje ARM?

Japonská invaze. Proč SoftBank kupuje ARM?

Lupa.cz: Vodafone umí volání přes Wi-Fi. Z ciziny jako v ČR

Vodafone umí volání přes Wi-Fi. Z ciziny jako v ČR

Měšec.cz: Zelená karta – kde neplatí povinné ručení?

Zelená karta – kde neplatí povinné ručení?

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

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

Podnikatel.cz: Používají čárové kódy, vyhledávače je mají radši

Používají čárové kódy, vyhledávače je mají radši

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

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

Vitalia.cz: Jak na domácí zmrzlinu?

Jak na domácí zmrzlinu?

Podnikatel.cz: Nereaguje na výzvu ČOIky, zaplatí milion

Nereaguje na výzvu ČOIky, zaplatí milion

120na80.cz: Jaké plavecké pomůcky vaše dítě ochrání?

Jaké plavecké pomůcky vaše dítě ochrání?

Lupa.cz: EU začala prověřovat bezpečnost open-source

EU začala prověřovat bezpečnost open-source