PHP 5.3でこの静的 '継承'に少し問題がある 静的関数が静的クラスに存在するかどうかをテストする必要がありますが、親静的クラスの内部からテストする必要があります。php5.3静的継承に関する助けが必要
私は 'static'キーワードを使って、 'this'キーワードをシミュレートすることができます。 関数が存在するかどうかをテストする方法が見つかりません。ここで
は一例です:
// parent class
class A{
// class B will be extending it and may or may not have
// static function name 'func'
// i need to test for it
public static function parse(array $a){
if(function_exists(array(static, 'func'){
static::func($a);
}
}
}
class B extends A {
public static function func(array $a){
// does something
}
}
は、だから今はB::parse();
アイデアは 、サブクラスが機能を持っている場合、それが使用されることを、それ以外の場合は使用されませんですが、実行する必要があります。
私が試した:
function_exists(static::func){}
isset(static::func){}
をこれらの2が動作しません。
どのようにすればいいですか? ところで、私は回避策としてラムダ関数を渡す可能性について知っていますが、これは私の状況では オプションではありません。
私はちょうど今考えることができない非常に単純な解決策があると感じています。
今、私は
public static function parse(array $a){
if(function_exists(array(get_called_class(), 'func') {
/*...*/
を試してみてください
is_callable(配列( '静的'、 ' func '))は正常に動作しました。私は、もし 'func'が存在しなければ、is_callableは少なくとも変数が定義されていないという警告を出すかもしれないと心配しましたが、そうではありません。 func関数が存在しない場合はfalseを返します。これは正常です。 – Dmitri