Frage

Ich verwende einen ge_called_class Hack für das Erlauben späte statische Bindung in PHP-Version 5.2 (gefunden hier ).

Ich habe folgende in meinem Code:

# db_record.php
$ac = "ForumThread";
$objects = $ac::find("all");

Das wird nicht funktionieren in PHP 5.2 aus irgendeinem Grunde, so habe ich getan, um diese:

# db_record.php
$ac = "ForumThread";
eval("\$objects = {$ac}::find('all');");

Das auf der anderen Seite nicht mit der get_called_class Funktion arbeiten. Ich erhalte eine Fehlermeldung, dass die file Funktion nicht EVALED Abschnitt des Codes lesen kann.

War es hilfreich?

Lösung

Wenn Sie eval verwenden, Ihre Lösung ist falsch.

Warum wird nicht Ihre nicht-eval-Version arbeiten? Was läuft falsch? Was ist die vollständige und umfassende Fehlermeldung?

Die benutzer suppled Version von get_called_class führt einen Backtrace und versucht, den Anrufer Datei zu öffnen, die Klassennamen zu bestimmen. Der Grund für die eval versagt ist, weil die eval Backtrace nicht einen Dateinamen nicht liefert.

(Edit:.? Auch dass get_called_class Hack ist sehr viel ein Hack Gibt es einen Grund, warum Sie nicht 5.3 verwenden)

Haben Sie versucht, mit call_user_func ? call_user_func(array($ac, 'find'), 'all') sollte rufen Sie die statische Methode find für die Klassennamen in $ac mit dem Paramater 'all' enthalten. Siehe auch den Rückruf pseudo-Typen, und die "Typ 2" Beispiel in bestimmten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top