0

ge_called_classPHP バージョン 5.2 で遅延静的バインディングを許可するためにハックを使用しています (ここにあります)。

私のコードには次のものがあります。

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

これは、何らかの理由でphp 5.2では機能しないため、次のようにしました。

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

一方、これは関数ではget_called_class機能しません。file関数がコードの評価されたセクションを読み取れないというエラーが表示されます。

4

1 に答える 1

0

eval を使用している場合、ソリューションは間違っています。

非評価版が機能しないのはなぜですか? 何がうまくいかないのですか?完全で完全なエラー メッセージは何ですか?

ユーザー提供のバージョンのget_called_classは、バックトレースを実行し、呼び出し元のファイルを開いてクラス名を判別しようとします。eval が失敗する理由は、eval バックトレースがファイル名を提供しないためです。

(編集: また、そのget_called_classハックは非常にハックです。5.3 を使用できない理由はありますか?)

call_user_funcを使ってみましたか? パラメータで含まれるクラス名の静的メソッドを呼び出すcall_user_func(array($ac, 'find'), 'all') 必要があります。コールバック疑似型、および具体的な「タイプ 2」の例も参照してください。find$ac'all'

于 2010-06-14T02:52:27.760 に答える