2010-08-02 65 views
3

我正在使用PHP编写客户管理系统,以便脱机使用(即在客户端计算机上)。我曾考虑过使用Java或C#,但得出的结论是,让浏览器为我完成所有布局并让公司在他们的计算机上安装wamp更容易。为什么我不能将一个实例变量声明为PHP中的一个对象数组?

通过这个接口,他们也将能够管理代理商(即销售人员绕过他们的区域获取公司订单,如果有人不知道)。这是我将在这篇文章中用来演示我遇到的问题的部分。

基本上我有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; 
    } 
} 
?> 

我使用NetBeans IDE 6.9启用了PHP,以及(因为你可能已经猜到了)我已经安装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年前。

在此先感谢。

问候,

理查德

回答

5

的问题是,你想在一个表达式(以new呼叫是一个表达式)的声明来初始化实例变量。这是行不通的。把这个任务放在构造函数中,它会起作用。

像这样:

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

    private $pages; 

} 
+0

我有这方面的一个问题:这是对实例化类对象数组在构造函数中的最佳实践,或可在此以任何其它类的方法来完成? (例如:我有一个叫'calculateInvoiceTotal') – kmancusi 2016-02-28 19:06:59

相关问题