関数の存在を確認する際に問題が発生しました - function_exists() と method_exists() は知っていますが、探している機能を取得できません
$MM->Player->Play() のようなソケット接続を介して関数を渡します。その後、それらを評価し、ソケット接続を介して結果を返します。
関数をフィルター処理します ($MM で開始する必要があります。それ以外は拒否されます) が、関数が存在するかどうかをコードで確認することはできません。関数が存在しないとサーバーがクラッシュするため、これは重要です。
誰でもこれの解決策を知っていますか??
前もって感謝します。
コード:
$MM = new SDBApplication;
SDBApplication のコンストラクターで:
$this->Player = new SDBPlayer;
チェックするために次の方法を試しました:コード:
method_exists($MM, "Player::Play");
function_exist("$MM->Player->Play);
関数が存在する場合でも、両方とも false を返します
ソリューション
$parts = explode('->', $string);
$numParts = count($parts)-1;
$object = '$MM';
for($i=0; $i < $numParts; $i++){
$object .= '->'.$parts[$i];
}
$parts[$numParts+1] = preg_replace('(\\(.*\\))', '', $parts[$numParts]);
eval( '$check = method_exists('.$object.', '.$parts[$numParts+1].');');
入力が文字列であるため、評価する必要があります。