【问题标题】:Why can't I declare an instance variable as an array of objects in PHP?为什么我不能在 PHP 中将实例变量声明为对象数组?
【发布时间】:2011-03-24 00:34:43
【问题描述】:

我正在用 PHP 编写一个客户管理系统,以供离线使用(即在客户端计算机上)。我曾考虑使用 Java 或 C#,但得出的结论是让浏览器为我完成所有布局更容易,只需让公司在他们的计算机上安装 wamp。

通过此界面,他们还可以管理代理(即,在他们所在地区为公司获取订单的销售人员,以防任何人不知道)。这是我将在这篇文章中用来演示我遇到的问题的部分。

基本上我有 4 个类 - AgentPages、AgentList、AgentDetails 和 AgentForm。 AgentForm 将有两种模式 - 编辑和新建。 AgentPages 有一个名为 getPages 的函数,它返回其他 3 个类的实例数组。但是它不喜欢“new”关键字。

我的代码如下(仅适用于 AgentPages 类):

<?php
require_once("AgentList.php");
require_once("AgentDetails.php");
require_once("AgentForm.php");
class AgentPages {
    public function  __construct() {
        echo "Constructed";
    }
    private $pages = array("List" => new AgentList(), "Details" => new AgentDetails(), "Form" => new AgentForm());

    function getPages() {
        return $this->pages;
    }
}
?>

我正在使用启用 PHP 的 netbeans 6.9 IDE,并且(您可能猜到)我安装了 wamp 服务器。在 PHP 5.3 版下,netbeans 调试器告诉我“解析错误:第 20 行 C:\wamp\www\CustomerApp_v2\Agents\AgentPages.php 中的解析错误”。在 5.2.11 下,它在那条线上说明了一些关于意外 T_NEW 的信息。我已经在第 20 行之前删掉了一个大注释,但我可以告诉你第 20 行是 $pages 的声明。我现在每个类都有一个空的构造函数。

我也尝试了以下行而不是第 20 行:

$AgentList = new AgentList();

这也不起作用 - 我得到同样的错误。根据我看过的所有教程,我的代码没有任何问题 - 我可能只是忽略了一些明显的东西。

有人知道我做错了什么吗?我之前做过很多 PHP 面向对象的东西,但最后一次接触它是在 2 年前。

提前致谢。

问候,

理查德

【问题讨论】:

    标签: php parse-error


    【解决方案1】:

    问题是您试图在声明中使用表达式初始化实例变量(对new 的调用是一个表达式)。那是行不通的。将赋值放在构造函数中,它将起作用。

    像这样:

    class AgentPages {
        public function  __construct() {
            $this->pages = array("List" => new AgentList(), "Details" => new AgentDetails(), "Form" => new AgentForm());
            echo "Constructed";
        }
    
        private $pages;
    
    }
    

    【讨论】:

    • 我对此有一个疑问:最佳实践是在构造函数中实例化您的 Class 对象数组,还是可以在任何其他类方法中完成? (例如:我有一个叫calculateInvoiceTotal
    猜你喜欢
    • 2012-03-28
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 2019-12-10
    • 2011-03-29
    • 1970-01-01
    相关资源
    最近更新 更多