在将对象指定为属性后失去使用static关键字的能力[php]

时间:2015-02-02 21:05:44

标签: php oop

我不明白为什么以下输出变量:

class Sample(){
    public $query;

    function __construct() {
        $test = new \SolrQuery();
        echo $test::FACET_SORT_INDEX;
        exit();
    }
}

但这给了我一个致命的错误:

  

[解析错误:语法错误,意外T_PAAMAYIM_NEKUDOTAYIM,   期待','或';']

class Sample(){
    public $query;

    function __construct() {
        $this->query = new \SolrQuery();
        echo $this->query::FACET_SORT_INDEX;
    }
}

我猜它与变量的权限有关?我能做些什么来解决它吗?

2 个答案:

答案 0 :(得分:4)

鉴于此:

class foo {
        static public $foo = 'foo!';
}

class bar {
        public $query;
        function t1() {
                $test = new foo();
                echo $test::foo;
        }
        function t2() {
                $this->query = new foo();
                echo $this->query::foo;
        }
        function t3() {
                echo foo::$foo;
        }
}
$x = new bar();
$x->t1();   /// dies with "undefined class constant 'foo'
$x->t2(); /// dies with unexpected  T_PAAMAYIM_NEKUDOTAYIM
$x->t3(); // works, prints "foo!"

基本上,您尝试使用错误的语法访问静态类属性。

答案 1 :(得分:1)

尝试\SolrQuery::FACET_SORT_INDEX; 这是一个不是对象的常量