Jako parametr předávaný referencí je podle dokumentace možné předat tři různé hodnoty: proměnné, nově vytvořené objekty a výsledky funkcí vracejících referenci. Před PHP 4.4.0 a PHP 5.0.5 se to důsledně nekontrolovalo a bylo možné předat např. i výsledek funkce, která referenci nevrací. Za určitých okolností to ale vedlo k neoprávněným přístupům do paměti a následným pádům aplikace. Vývojáři PHP se rozhodli tento nedokumentovaný způsob postupně zakázat – ve větvi 4.4 se na něj upozorňuje chybami typu E_NOTICE, ve větvi 5.1 potom fatálními E_ERROR. Nevím, jestli by se současnými vnitřnostmi PHP bylo možné nedokumentovaný způsob volání povolit, každopádně vývojáři si celkem logicky řekli, že pokud funkce přebírá parametr referencí, měl by volajícího zajímat výsledek a částečně i díky tomu zvolili cestu postupného zakázání tohoto volání. U funkcí jako asort to dává dobrý smysl, u funkcí typu current, kde nás zajímá především návratová hodnota, už to mírně pokulhává.
Co mi ale přijde nejhorší – spousta lidí žijících v domnění, že PHP rozumí, je najednou překvapena, když zjistí, že jejich kód je celou dobu špatně. V dokumentaci je od prosince 2000 jasně řečeno, že jiné způsoby předávání parametrů referencí mají nedefinované chování. PHP tak podle mě zase jednou doplatilo na to, že bylo vůči uživatelům příliš tolerantní.
Diskuse je zrušena z důvodu spamu.