2017-09-11 10 views
2

定数がインスタンス化されたクラスで定義されているかどうかを確認する方法はありますか?定数が別のクラスから定義されているかどうかを確認するにはどうすればよいですか?

私が持っている:私はそれが設定されているかどうかを確認し、その値(またはデフォルト値)を使用することを特徴とする請求

Class foo { 
    const BAR = 'baz'; 
} 

以降$fooは別のクラス内の関数に渡さなっている:

Class abc { 
    public function xyz($foo) 
    { 
    if (defined($foo::BAR)) { 
     $var = $foo::BAR; 
    } else { 
     $var = 'default'; 
    } 
    } 
} 

しかし、私が何をするにしても、定数が定義されているかどうかはわかりません。それは定義され、動作しているか、または定義されておらず、elseに到達する前にFatalError: Undefined class constant 'BAR'をスローします。

これらは、様々な私は(私が思い出すことができることを)やったダンプとその結果、次のとおりです。

$foo::BAR   | string 'baz' (length=3) 
$foo->BAR   | null 
$foo::BAR !== null | boolean true (when set) Error (when unset) 
defined($foo::BAR) | boolean false 
defined('$foo::BAR') | boolean false 
defined("$foo::BAR") | boolean false 
defined('BAR', $foo) | Error 

それは私がLaravel 5.4とPHP 5.6で働いている、まったく助けている場合。

+1

クラス定数視認性がこれは働いていたPHP 7.1以降 – amflare

答えて

4

は、おそらくオブジェクト変数の代わりにクラス名を指定して、より良い作品:

if(defined(get_class($foo).'::BAR')) // Do something 
+1

です!ありがとう! – amflare

関連する問題