Kvůli převaze
hostingů podporujících PHP jen do verze 4, programuji zatím stále v této
překonané verzi. A je to občas utrpení, cpát všude &
a
přitom vědět, že v PHP 5 už nemusím.
Nicméně programovat v PHP 4 se dá s vědomím dopředné kompatibility, už jsem o tom jednou psal. Dnes jsem však narazil na zajímavý oříšek.
Potřeboval jsem naklonovat objekt, říkejme mu třeba $dolly
.
PHP4 má tendenci klonovat jakýkoliv objekt, který mu přijde pod ruku. Tedy
stačí napsat $klon = $dolly
a je hotovo. Protože však
klonování není přesně to, co programátor v naprosté většině
případů očekává (a navíc je to v Evropské unii zakázané), je třeba
v přiřazení použít symbol reference: $klon = & $dolly
.
PHP5 tuto nutnost eliminuje a zápis $reference = $dolly
vytvoří
automaticky referenci. Ale to už určitě dávno víte.
Kompatibilní klonování
Dobrá, a co když skutečně chci v PHP5 $dolly
naklonovat?
K tomuto účelu slouží zcela nová konstrukce:
$klon = clone $dolly;
Bohužel, PHP4 si na tomto zápisu vyláme zuby, ohlásí Parse error a odporoučí se do věčných lovišť. A teď babo raď, jak napsat kód, který by fungoval v obou verzích?
První myšlenka byla příkaz do zdrojového kódu vložit jako řetězec
(vyhnout se parseru) a pak jej spustit přes eval(). Ale nakonec mě napadlo, že přece
zápis $dolly
a ($dolly)
je ekvivalentní.
Ozávorkováním nic nezkazím. Takže v PHP5 lze klidně napsat také:
$klon = clone ($dolly);
A co na to PHP4? Ve své dětinské naivitě myslí, že tímto zápisem volám funkci clone(). Takže parse error je zažehnán a stačí jen deklarovat funkci clone(). Samozřejmě jen pro PHP verze 4:
if (PHP_VERSION < 5) eval('
function clone($obj)
{
return $obj;
}
');
That's all folks…
Komentáře
Dero #1
Jj, příjemný ‚háček‘, i když jsem ho byl nucen taky nedávno vynajít.
Díky. :o)
johno #2
Jediný zádrhel vidím v tom, že keď si človek v PHP5 spraví vlastnú klonovaciu metódu tak v PHP4 to bude robiť niečo úplne iné.
pif #3
slusne :)
a co texy? :) nikde jinde tady neni lepsi moznost jak se informovat jak to s ni jde, tak se ptam aspon touto cesotu
David Grudl #4
#3 pife, požádal jsem několik hostingových firem, zda by byly ochotni hostovat texy.info výměnou za odkaz / obrázek / informaci. Z jedné se mi ozvali, že by to šlo, ale trošku se to vleče. Takže tak… Prostě technické problémy
pif #5
jak to vypada nyni, aktualni info? :)) kdo je ta stastna webhostingova spolecnost?
David Grudl #6
#5 pife, velmi rychle se mi ozvali z Gigawebu, kde mimochodem hostuje i La Trine a jsem s nimi spokojen. Ale realizace poněkud pokulhává a je mi hloupé se neustále připomínat…
Dnes mi přišel email také od Českého hostingu takže to asi šoupnu tam.
pif #7
uz aby to bylo, hodne stesti :)
insekticid #8
tenhle hack je great =)
Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.