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?
Lupa.cz: Sdílíte na Facebooku soukromé odkazy?

Sdílíte na Facebooku soukromé odkazy?

120na80.cz: Cestovní nevolnost. Co pomůže?

Cestovní nevolnost. Co pomůže?

120na80.cz: Cestovní lékárnička: na co nezapomenout

Cestovní lékárnička: na co nezapomenout

Vitalia.cz: Vědci: Hnojení chemií je zbytečné

Vědci: Hnojení chemií je zbytečné

DigiZone.cz: VR i AR na vzestupu. Do roku 2018...

VR i AR na vzestupu. Do roku 2018...

Vitalia.cz: 7 receptur z pohanky. Svědčí zdraví

7 receptur z pohanky. Svědčí zdraví

DigiZone.cz: Kanály Novy na Slovensku oficiálně?

Kanály Novy na Slovensku oficiálně?

Vitalia.cz: Máte chutě? Nejezděte do světa, ale do Dobřichovic

Máte chutě? Nejezděte do světa, ale do Dobřichovic

DigiZone.cz: Slováci první, Češi třetí. Krásný...

Slováci první, Češi třetí. Krásný...

Měšec.cz: Ceny PHM v Evropě. Finty na úspory

Ceny PHM v Evropě. Finty na úspory

Lupa.cz: Zaměstnanec T-Mobilu ukradl data o zákaznících

Zaměstnanec T-Mobilu ukradl data o zákaznících

Lupa.cz: U Chomutova vyroste dotované datacentrum

U Chomutova vyroste dotované datacentrum

Měšec.cz: Rusové platí mobilem. Funguje to i v Česku

Rusové platí mobilem. Funguje to i v Česku

DigiZone.cz: Satelitní Flix TV vyráží do boje

Satelitní Flix TV vyráží do boje

Měšec.cz: Práce na tři směny? Neblázněte, mám doma psa

Práce na tři směny? Neblázněte, mám doma psa

DigiZone.cz: Bizár sněmovního jednání

Bizár sněmovního jednání

Podnikatel.cz: Takhle si Babiš představuje nové daně

Takhle si Babiš představuje nové daně

120na80.cz: Proč komáři létají hlavně večer?

Proč komáři létají hlavně večer?

Měšec.cz: Tipy, než vyrazíte autem na dovolenou

Tipy, než vyrazíte autem na dovolenou

Podnikatel.cz: Výpadek internetu a #EET. Co s tím?

Výpadek internetu a #EET. Co s tím?