PHP:将类变量声明为 stdClass 对象

2022-08-30 22:14:14

这可能很简单,但我无法弄清楚如何为Google表达这个问题,所以这里是:

所以,我经常做这样的事情...

class foo {
    private $bar = array();
}

...将某个类属性设置为数组。但是,我想将私有属性设置为对象,如下所示:

class foo {
    private $bar = new stdClass();
}

我尝试了几种变体,但没有一个有效。这能做到吗?对于奖励积分,您可以分配私有财产作为任何其他类别的对象吗?

谢谢!


答案 1

不能在类成员声明中使用函数(包括构造函数)。而是在类的构造函数中设置它。

class Foo {

  private $bar;

  private $baz;

  public function __construct() {

    $this->bar = new stdClass();
    $this->baz = new Bat();

  }

  public function __get($key) {
      if(isset($this->$key) {
        return $this->$key;
      }

      throw new Exception(sprintf('%s::%s cannot be accessed.', __CLASS__, $key));
  }

}


$foo = new Foo();

var_dump($foo->bar);
var_dump($foo->bat);

当您扩展类并需要重写构造函数但仍需要父类构造函数中的内容时:

class FooExtended
{
   protected $coolBeans;

   public function __construct() {

      parent::__construct(); // calls the parents constructor

      $this->coolBeans = new stdClass();
   }
}

$foo = new FooExtended();

var_dump($foo->bar);
var_dump($foo->bat);
var_dump($foo->coolBeans);

还应该注意的是,这与财产的可见性无关...它的 、 、 或 并不重要。protectedprivatepublic


答案 2

推荐