phpbar.de logo

Mailinglisten-Archive

[php] Objekt klonen oder kopieren je nach Version

[php] Objekt klonen oder kopieren je nach Version

Sebastian Mendel lists at sebastianmendel.de
Fre Mar 7 22:44:45 CET 2008


Peter Bieling schrieb:
> Sebastian Mendel schrieb:
> 
>>>> Auch nicht sauber, aber vielleicht die bessere Lösung.
>>> danke, das habe ich jetzt so übernommen. Die Variante von Sebastian 
>>> funktioniert bei mir zwar auch, ich weiß aber nicht, ob in allen Versionen.
>> in allen Versionen, hat nichts mit clone oder clone() oder OOP zu tun, 
>> sondern damit das clone als Schlüsselwort behandelt wird und clone() als 
>> Funktion, und ob Funktionen tatsächlich existieren wird erst überprüft wenn 
>> die Zeile tatsächlich ausgeführt wird ...
> 
> danke, die Erklärung für PHP4 leuchtet mir ein. Was ist aber mit dem 
> Einwand von Mr. Wittens?
> http://acko.net/node/54
> "PHP 4 on the other hand will think clone() is a function. [...]

das Problem tritt doch aber nur auf, weil er in diesem Moment clone() 
probiert (was in PHP 5 funktioniert), und er jetzt feststellt was passiert 
wenn dieser Code in PHP 4 läuft - wir sind doch aber schon viel weiter, denn 
clone() wird gar nicht ausgeführt wenn PHP 4 läuft ...


das End-Ergebnis:

function drupal_clone($object) {
     return version_compare(phpversion(), '5.0') < 0 ? $object : clone($object);
}

ist doch selbe wie:

if (version_compare(PHP_VERSION, "5.0.0", "<") > 0) {
     $pdfcopy = $pdf;
} else {
     $pdfcopy = clone($pdf);
}

wie


$pdfcopy = (version_compare(PHP_VERSION, "5.0.0", "<") > 0) ? $pdf : 
clone($pdf);

wie

$pdfcopy = (version_compare(PHP_VERSION, "5.0") < 0) ? $pdf : clone($pdf);


> usw. Also auch wieder eval().
> 
> Da ich keine Fehlermeldung bei PHP5 festgestellt habe, ist die Frage, ob 
> frühere PHP5 Versionen Zicken machen, wenn man ihnen clone ($obj) statt 
> clone $obj vorsetzt.

wohl eher PHP 4 ...


-- 
Sebastian

php::bar PHP Wiki   -   Listenarchive