【问题标题】:PHP Array of (new) objectsPHP(新)对象数组
【发布时间】:2023-03-04 02:52:01
【问题描述】:

我目前正在为我在 PHP 中开发的应用程序开发一个基于 Web 的管理前端(在几次尝试让 Lua 与 Apache 和 Nginx 一起工作失败之后,这也有点奇怪),而 PHP 的数组让我感到沮丧。

我正在尝试初始化一个对象数组,就像在任何其他支持 OOP 的语言中一样:

private $leftNavItems = array(
        new LeftNavItem("./img/icon/status.png", "status", "App Status", "./articles/app_status.phtml", "app_status")
    );

但是,我收到一条错误消息,指出“不允许将表达式作为字段默认值”。

为什么我不能用新对象初始化数组?我是否必须通过使用临时变量和 array_push 来解决这个问题?

编辑:我来自 C#、Java 和 C++ 等 OOP 语言,以及 Lua 等纯过程语言。

【问题讨论】:

  • 你的 LeftNavItem 是什么?
  • 这是一个包含几个变量、一个构造函数和几个 getter 的类。
  • 在类的构造函数__construct()中移动初始化部分。对象属性只能是initialized on their definition,其值只能在编译期间进行评估。
  • @Schleis 我不同意,我不仅要寻找解决方法,还要问为什么这是一个约束。另外,我正在尝试创建一个新对象数组,而不是初始化类中的值。

标签: php arrays


【解决方案1】:

在类的构造函数__construct() 中移动初始化部分。对象属性只能是initialized on their definition,其值只能在编译期间进行评估。

class X {
    private $leftNavItems = array();

    public function __construct()
    {
        $this->leftNavItems = array(
            new LeftNavItem("./img/icon/status.png", "status", "App Status", "./articles/app_status.phtml", "app_status")
        );
    }
}

属性的初始化器在编译期间被评估;它们不是初始化类时要执行的代码片段。

您的代码尝试通过创建对象来初始化变量。创建new 对象是在代码执行期间发生的活动。

【讨论】:

  • 感谢您的解释。只要允许,我就会接受。
猜你喜欢
  • 2012-03-16
  • 2017-10-21
  • 2018-11-08
  • 2012-01-26
  • 2021-12-12
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
相关资源
最近更新 更多