据我所知,如果创建不在函数范围内,PHP不允许我在ClassA中创建一个新的ClassB实例。或者我只是不明白......
class ClassA {
const ASD = 0;
protected $_asd = array();
//and so on
protected $_myVar = new ClassB(); // here I get *syntax error, unexpected 'new'* underlining 'new'
// functions and so on
}
我是否需要某种构造函数,或者是否有一种方法可以按照我的意愿以自由的方式实际创建对象实例,就像我以前在Java或C#中所做的那样。或者使用Singleton是我方法中唯一最接近的解决方案?
P.S。 ClassB与ClassA位于同一个包和文件夹中。
答案 0 :(得分:4)
根据PHP docs:
声明可能包含初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能进行评估。
因此,您需要在constructor中实例化$_myVar
:
protected $_myVar;
public function __contruct() {
$this->_myVar = new ClassB();
}
答案 1 :(得分:2)
是的,有一个构造函数(见下文)
class ClassA {
const ASD = 0;
protected $_asd = array();
//and so on
protected $_myVar; // initialization not allowed directly here
public function __contruct() {
$this->_myVar = new ClassB();
}
}