2010-12-09 4 views
0

Was ist besser und warum:php progamiticly Zugriff statische Funktionen

call_user_func(array($class, $method), $params); 

oder

$class::$method($params); 

der zweite Ansatz nur in PHP 5.3 funktioniert. Ich in älteren Virion in wirft einen schwerwiegenden Fehler unerwartet T_PAAMAYIM_NEKUDOTAYIM. (meine ide denkt, es ist auch ein syntax fehler. Aber es funktioniert)

+1

Mein Verständnis ist, dass beide Ansätze in der gleichen effektiven Laufzeit Ansatz führt die Funktion aufrufen und ausführen soll ungefähr gleich. – cdhowie

+0

Sobald Ihre Frage die Worte "Was ist besser" enthält, sollten Sie auf http://programmers.stackexchange.com nach Antworten suchen. – Stephen

+0

Der zweite kann nur Methoden ausführen, die Parameter als Array von Elementen verwenden. Der erste kann auf Methoden zugreifen, die beliebige Parameter annehmen. Was sollte in der Klasse leichter zu lesen sein. – DampeS8N

Antwort

3

Nun, wenn Portabilität für Sie wichtig ist, dann die offensichtliche Antwort, dass Sie den ersten Weg verwenden sollten. Wenn Sie wissen, dass Sie immer mindestens auf PHP 5.3 abzielen, sollten Sie die Methode verwenden, die Sie selbst am angenehmsten finden. Die $class::$method($params); ist kürzer und sauberer, also würde ich selbst dafür sorgen.

1

Beide sind in Ordnung. Meiner Meinung nach ist die zweite syntaktisch klarer. Wie Sie gesagt haben, ist der einzige Nachteil, dass es 5.3 + benötigt.

+0

Einverstanden - meiner Meinung nach ist es besser lesbar. – Hamish

0

Mit PHP 5.3.0, gibt es auch die forward_static_call() Funktion, obwohl es seine Verwendung etwas mehr Einschränkungen ist