在PHP类中的变量中声明新的对象实例



好吧,我会很清楚,我得到一个错误,而声明一个变量作为另一个类的实例。这两个类都在不同的文件中,我做了一个简单的例子来快速显示错误。

我得到的错误如下:

PHP message: PHP Fatal error:  New expressions are not supported in this context in Nameclassfile.php on line 6"

我不是php专家,目前我运行php 8.1,我甚至不确定是否允许将变量声明为其他类的实例。

我的代码是:

  • 第一类文件:Nameclassfile.php
<?php
require_once "Valueclassfile.php";
class NameClass {
private $name;
private $value = new ValueClass();
function __construct() {
$this->name = "Default name";
}
function get_name() {
return $this->name;
}
}
?>
  • 第二类文件:Valueclassfile.php
<?php
class ValueClass {
private $value;
function __construct() {
$this->value = "Default Value";
}
function get_value() {
return $this->value;
}
}
?>

我希望你能帮我一把,致以最诚挚的问候。

你当然可以将变量声明为其他类的实例,但你只能为你的属性初始化声明静态(即编译时)值。

class Foo {
private $value = 123;
}

你不能像这样使用需要执行(即运行时)的代码:

class Foo {
private $value = call_some_function();
}

或:

class Foo {
private $value = new ValueClass();
}
简单的解决方法是在构造函数中进行初始化:

class NameClass {
private $value;
function __construct() {
$this->value = new ValueClass();
}
}
注意,在8.1+中,您可以使用构造函数属性提升功能,该功能允许new: 的实例
class NameClass {
function __construct(private $value = new ValueClass()) {
}
}

最新更新