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?
Zasílat nově přidané názory e-mailem
Root.cz: DDoS útoky aneb když vám zahltí dráty

DDoS útoky aneb když vám zahltí dráty

Vitalia.cz: Proč máme prasklý chléb nejraději?

Proč máme prasklý chléb nejraději?

120na80.cz: Tady se vaří padělané léky

Tady se vaří padělané léky

DigiZone.cz: Mafra varuje před stíháním za pomluvu

Mafra varuje před stíháním za pomluvu

DigiZone.cz: Druhá anglická liga pro Digi TV

Druhá anglická liga pro Digi TV

120na80.cz: Velký přehled: 7 očkování proti exotickým nemocem

Velký přehled: 7 očkování proti exotickým nemocem

Vitalia.cz: Mražené ryby z Makra byly falšované

Mražené ryby z Makra byly falšované

Podnikatel.cz: Přechod z OSVČ na firmu? Totální šok!

Přechod z OSVČ na firmu? Totální šok!

Lupa.cz: Nová podoba Instagramu? Katastrofa

Nová podoba Instagramu? Katastrofa

DigiZone.cz: Změní se veřejnoprávní status ČT?

Změní se veřejnoprávní status ČT?

Root.cz: Zákon o hazardu je v rozporu s ústavou

Zákon o hazardu je v rozporu s ústavou

Vitalia.cz: SÚKL: vakcíny jsou bezpečné a s autismem nesouvisí

SÚKL: vakcíny jsou bezpečné a s autismem nesouvisí

Lupa.cz: Kam si doma dáte internet věcí? Na polici?

Kam si doma dáte internet věcí? Na polici?

Vitalia.cz: Taky ji kupujete? Je šizená

Taky ji kupujete? Je šizená

Podnikatel.cz: Alza radí e-shopům, jak opustit Heureku

Alza radí e-shopům, jak opustit Heureku

Vitalia.cz: 7 nemocí očí, které musíte léčit včas

7 nemocí očí, které musíte léčit včas

Podnikatel.cz: Šizený guláš na pultě. Jako Lidl to nedělejte

Šizený guláš na pultě. Jako Lidl to nedělejte

Podnikatel.cz: Rošáda v živnostech. Týká se vás?

Rošáda v živnostech. Týká se vás?

Lupa.cz: Válka e-shopů. Alza končí s Heurekou

Válka e-shopů. Alza končí s Heurekou

Podnikatel.cz: Heureka pod Rockaway? Tohle musí splnit

Heureka pod Rockaway? Tohle musí splnit