2015-05-15 53 views
0

有人可以向我解釋這個嗎?PHP定義的方法返回false值,但存在靜態變量

<?php 
class SomeClass { 
    public static $SomeStatic = "SomeValue"; 
} 

$class_name = "SomeClass"; 

var_dump("{$class_name}::\$SomeStatic"); // shows "SomeClass::$SomeStatic" 

var_dump($class_name::$SomeStatic); // shows "SomeValue" 

var_dump(defined("{$class_name}::\$SomeStatic")); // shows "bool(false)" 

爲什麼定義的方法返回false?認爲第二個var_dump返回一個值。

+2

'defined()' - > ['檢查一個給定的'**常量**'是否存在'](http://php.net/manual/en/function.defined.php)在這裏有任何常數。 ('static'!=='constant') – Rizier123

+0

如何測試靜態變量是否存在? isset方法不起作用.. – gptimajo

+0

爲什麼'isset()'不起作用?你如何嘗試使用它? – Rizier123

回答

3

靜態變量不是常量,所以defined返回false

要檢查如果一個類有一個靜態的屬性,你可以使用此功能:關於ReflectionClass類和getStaticProperties方法

function has_static_property($class, $property_name) 
{ 
    $reflection  = new ReflectionClass($class); 
    $static_properties = $reflection->getStaticProperties(); 

    return array_key_exists($property_name, $static_properties); 
} 

更多信息可以在PHP文件上找到。

+0

爲什麼不只是:'if(isset(SomeClass :: $ SomeStatic))'? – Rizier123

+0

返回致命錯誤 – gptimajo