Update: Leírtam az alábbiakban pár baromságot, a lenti hozzászólásban találhatóak a korrektúra és a részletek. A nem igaz részeket dőlt kiemeléssel megjelölöm, félkövérrel pedig az extra infók.
Tegnap felhívott egyik ügyfelem, hogy kb. 4-5 évvel ezelőtt tákolt rendszere php5-re (5.3.3-6) történő frissítés után, üres oldalt ad vissza. Némi konfigurálás után (ugyebár az error riportolás alapban Off a php.ini-ben) az üres oldal tele lett hányva E_Notice-okkal. A notice-ok java része "Undefined offset", "Undefined index" volt tömb műveleteknél.
Némi nézelődés és RTFM után jött a megvilágosodás. PHP fejlesztői igen frappáns, csodakompatibilis megoldást találtak ki:
"Attempting to access an array key which has not been defined is the same as accessing any other undefined variable: an E_NOTICE-level error message will be issued, and the result will be NULL."
Ízlelgessük egy kicsit, legyen bármilyen értéke a tömb elemének, egy figyelmeztetés küldése után az értéke NULL lesz.
Mit is jelent ez? Nézzünk egy példát:
$kutyafule = array("vizsla" => 2, "bobtail" => 2, "snaucer" => 3);
if($kutyafule[0] == 1){
....
}
Ez esetben mindig hamis lesz az eredmény, mert nem numerikusan indexelt a tömb és emiatt "Undefined offset"-et fog dobni. Ugyanez vonatkozik a amikor egy cikluson belül próbálunk numerikus indexxel ugrálni. Ha azt szeretnénk, hogy a tömb numerikusan indexelt legyen akkor létrehozásakor $kutyafule[] = array(); formában kell megadni.