在php中调用另一个类中的静态属性

时间:2013-10-22 09:42:30

标签: php oop static dynamic-variables late-static-binding

我在另一个类中调用类的静态属性时遇到问题。

Class A {

    public $property;

    public function __construct( $prop ) {
        $this->property = $prop;

    }
    public function returnValue(){
        return static::$this->property;
    }

}

Class B extends A {

    public static $property_one = 'This is first property';
    public static $property_two = 'This is second property';

}

$B = new B( 'property_one' );
$B->returnValue();

我希望返回This is first property但输出只是__construct中参数输入的名称;

当我print_r( static::$this->property );时,输出只是property_one

3 个答案:

答案 0 :(得分:1)

也许是这样的?

<?php
Class A {

    public $property;

    public function __construct( $prop ) {
        $this->property = $prop;
        print static::${$this->property};
    }
}

Class B extends A {

    public static $property_one = 'This is first property';
    public static $property_two = 'This is second property';

}

$B = new B( 'property_one' );

(我的意思是你可以通过这种方式访问​​(打印,...)属性,但构造函数无论如何都会返回一个对象。)

答案 1 :(得分:1)

只需改变:

return static::$this->property;

使用:

return static::${$this->property};

答案 2 :(得分:1)

这里有几个问题:

  1. 静态属性$property_one在类B中声明,A类的构造函数不能访问该属性,也不能保证此属性存在。
    当然,从PHP 5.3开始,支持后期静态绑定,但这并没有改变这样一个事实:你永远不会确定一些只是发生的静态属性被调用{{1碰巧被分配了。如果分配了一个对象怎么办?一个int,还是浮动?
  2. 您可以访问以下静态属性:$this->propertystatic::$propery。请注意self::$property!当您撰写$时,您希望将其评估为static::$this->property。您显然错过了self::property_one标志 至少你需要的是$。查看变量变量的PHP手册。
  3. 您试图从构造函数返回一个字符串,这是不可能的。构造函数必须必须才能返回该类的实例。任何不会被忽略的返回语句。
  4. 要在构造函数中访问子类的静态属性,您不能不依赖于子构造函数:

    self::${$this->property}

    另一种选择是:

    Class A
    {
        public $property;
    }
    
    Class B extends A
    {
        public static $property_one = 'This is first property';
        public static $property_two = 'This is second property';
        public function __construct( $prop )
        {
            $this->property = $prop;
            print self::${$this->property};
        }
    }
    $B = new B( 'property_one' );