我经常搜索答案,但只发现了一些问题,即是否可以在另一个类中编写类,以及类似的东西。
所以有第一个文件,是:
文档1:
class MyClass1 {
private $myAttribute1;
__construct(){
this->myAttribute1 = 'blabla';
}
}
现在调用同一个文档
$myObject1 = new MyClass1();
在NetBeans中完全正常工作。
与此同时,当我构建另一个文档时,我们将其称为Document2,并在那里构建另一个类,这是用于MyClass1
,Netbeans告诉我存在问题:
文档2:
myClass2 {
$myAttribute2 = new myClass1();
}
所以这在我的NetBeans中不起作用,只是告诉我'意想不到的新'。如何在MyClass1
中使用myClass2
,因为这种方式不起作用?
答案 0 :(得分:5)
PHP只允许某些表达式用作类属性的初始化值:
class foo {
$x = 7; //fine, constant value
$y = 7+7; // only fine in recent PHPs
$z = new bar(); // illegal in all PHP versions
}
7+7
版本仅在最近的PHP版本中受支持,并且允许的唯一表达式是那些在编译时可以完全计算其结果值的表达式。由于new
无法在编译时执行,只能在执行时执行,因此它是一个彻头彻尾的永久非法表达。
这意味着“复杂”表达式只能在运行时计算,你必须在构造函数中执行该表达式:
class foo {
public $z;
function __construct(){
$z = new bar();
}
}