我可以在初始化类之前在PHP中修改其非静态属性吗?

时间:2018-12-23 21:26:50

标签: php oop immutability

考虑以下代码:

class MyClass
{

    public $test = 'foo';

    public function example()
    {
        return $this->test;
    }

}

// What I'm trying to do
MyClass->test = 'bar'; 

$test = new MyClass();
echo $test->example(); // Should return `bar` instead of `foo`.

我要在初始化基类 之前对其进行修改。 这可以在PHP中完成吗?

(是的,我知道可以修改static properties。我很好奇非静态。)

1 个答案:

答案 0 :(得分:1)

创建类后,无法更改属性的默认值。而且我很确定反射也不会允许它。

您可以改用以下方法:

class MyClass
{
  public static $default_test = 'foo';
  public $test;

  public function __construct()
  {
    $this->test = self::$default_test;
  }

  public function example()
  {
    return $this->test;
  }
}

MyClass::$default_test = 'bar';

$test = new MyClass();
echo $test->example();

基本上,您有一个保留默认值的静态属性,构造函数为其设置该属性的初始值。

演示:https://3v4l.org/djn3T

不过,为什么不将值传递给类的构造函数有些困惑。但是您可能有理由。