Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

porucha není na vašem přijímači

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…

Karma body: 19. Líbil se vám článek?

Komentáře » přidat

  1. avatar [1] Dero: nový

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

    Díky. :o)

    Posláno 25. 1. 2005 v 16.38 | Odpovědět
  2. avatar [2] johno: nový

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

    Posláno 25. 1. 2005 v 17.16 | Odpovědět
  3. avatar [3] pif: nový

    slusne :)

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

    Posláno 25. 1. 2005 ve 21.01 | Odpovědět
    Na komentář reagoval [4] David Grudl
  4. avatar [4] David Grudl: nový

    [3] pif: 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

    Posláno 25. 1. 2005 ve 21.35 | Odpovědět
  5. avatar [5] pif: nový

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

    Posláno 27. 1. 2005 ve 20.47 | Odpovědět
    Na komentář reagoval [6] David Grudl
  6. avatar [6] David Grudl: nový

    [5] pif: 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.

    Posláno 27. 1. 2005 ve 21.49 | Odpovědět
  7. avatar [7] pif: nový

    uz aby to bylo, hodne stesti :)

    Posláno 30. 1. 2005 v 10.18 | Odpovědět
  8. avatar [8] insekticid: nový

    tenhle hack je great =)

    Posláno 16. 11. 2005 ve 13.50 | Odpovědět

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

Výtah na začátek článku na první komentář

Názory čtenářů v diskusích nejsou názory provozovatele webu, a ten za jejich obsah neodpovídá.

La Trine © 2004, 2008 David Grudl – o webu
provozuje Pachollini.

Jakékoliv užití obsahu, včetně převzetí článků nebo jejich částí, je bez předchozího písemného svolení autora zakázáno.

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