3

我正在用 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 年前。

提前致谢。

问候,

理查德

4

1 回答 1

5

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

像这样:

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

    private $pages;

}
于 2010-08-02T03:32:01.653 回答