Na navigaci | Klávesové zkratky

Translate to English… Ins Deutsche übersetzen…

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…

Komentáře

  1. Dero http://dero.name #1

    avatar

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

    Díky. :o)

    před 12 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 12 lety
  3. pif http://www.pifik.com #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 12 lety | reagoval [4] David Grudl
  4. David Grudl http://davidgrudl.com #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 12 lety
  5. pif http://www.pifik.com #5

    avatar

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

    před 12 lety | reagoval [6] David Grudl
  6. David Grudl http://davidgrudl.com #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 12 lety
  7. pif http://www.pifik.com #7

    avatar

    uz aby to bylo, hodne stesti :)

    před 12 lety
  8. insekticid http://www.disney.com #8

    avatar

    tenhle hack je great =)

    před 11 lety

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