Na navigaci | Klávesové zkratky

Klonování, PHP4 a jeden hack

PHP 4 → 5 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…

před 20 lety v rubrice PHP | blog píše David Grudl | nahoru

Mohlo by vás zajímat

Komentáře

  1. Dero #1

    avatar

    Jj, příjemný ‚háček‘, i když jsem ho byl nucen taky nedávno vynajít.

    Díky. :o)

    před 20 lety
  2. johno #2

    avatar

    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é.

    před 20 lety
  3. pif #3

    avatar

    slusne :)

    a co texy? :) nikde jinde tady neni lepsi moznost jak se informovat jak to s ni jde, tak se ptam aspon touto cesotu

    před 20 lety | reagoval [4] David Grudl
  4. David Grudl #4

    avatar

    #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

    před 20 lety
  5. pif #5

    avatar

    jak to vypada nyni, aktualni info? :)) kdo je ta stastna webhostingova spolecnost?

    před 20 lety | reagoval [6] David Grudl
  6. David Grudl #6

    avatar

    #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.

    před 20 lety
  7. pif #7

    avatar

    uz aby to bylo, hodne stesti :)

    před 20 lety
  8. insekticid #8

    avatar

    tenhle hack je great =)

    před 19 lety

Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.


phpFashion © 2004, 2024 David Grudl | o blogu

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.