PHP共享实例成员变量

时间:2017-10-16 07:53:23

标签: php variables object instance

我不做OOPs / Class-based,如PHP' PHP'差不多,我对他们非常可怕。有人可以解释为什么这个代码破坏了?什么是适当的解决方法。谢谢。

<?php
namespace app\samples;

use models\Person;
use helpers\OtherClass;
use helpers\SomeClass;

class Sample
{
    private $num = 2; # Working
    private $str = 'My string'; # Working
    private $bool = true; # Working

    private $person = new Person(); # Breaks ??
    private $mValues = OtherClass::getValues(); # Breaks ??

    public function mFunction1()
    {
        SomeClass::doSomething($person, $mValues); // Use $person & $mValues here.
    }

    public function mFunction2()
    {
        SomeClass::doSomething($person, $mValues); // Use $person & $mValues here.
    }
}

1 个答案:

答案 0 :(得分:3)

来自PHP documentation on class properties

  

此[property]声明可能包含初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行求值,并且必须不依赖于运行时信息才能进行求值。

因此,为了向属性分配新类或静态方法的结果,必须在类的构造函数中执行此操作:

public function __construct()
{
    $this->person = new Person();
    $this->mValues = OtherClass::getValues();
}

此外,在方法调用中,您必须使用$this中的属性 - 在您使用的代码中(未定义,因此&#34; NULL&#34;)局部变量。

public function mFunction1()
{
    SomeClass::doSomething($this->person, $this->mValues); // Use $person & $mValues here.
}