我正在用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年前。
提前致谢。
此致
理查德
答案 0 :(得分:5)
问题在于您尝试使用表达式初始化声明中的实例变量(对new
的调用是表达式)。这不起作用。将赋值放在构造函数中,它将起作用。
像这样:
class AgentPages {
public function __construct() {
$this->pages = array("List" => new AgentList(), "Details" => new AgentDetails(), "Form" => new AgentForm());
echo "Constructed";
}
private $pages;
}