为什么我不能在PHP中将实例变量声明为对象数组?

时间:2010-08-02 03:24:50

标签: php parse-error

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

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

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

我的代码如下(仅适用于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年前。

提前致谢。

此致

理查德

1 个答案:

答案 0 :(得分:5)

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

像这样:

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

    private $pages;

}