views:

29

answers:

1

Hey,

I am writing a customer management system in PHP, for use offline (i.e. on the clients computer). I have considered using Java or C# but have come to the conclusion that it is easier to let the browser do all the layout for me, and just have the company install wamp on their computers.

Through this interface they will also be able to manage Agents (i.e. salesmen that go round their area getting orders for the company, in case any doesn't know). This is the section I will use in this post to demonstrate the problem I am having.

Basically I have 4 classes - AgentPages, AgentList, AgentDetails and AgentForm. AgentForm will have two modes - edit and new. AgentPages has a function called getPages, which returns an array of instances of the other 3 classes. However it does not like the "new" keyword.

My code is as follows (for the AgentPages class only):

<?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;
    }
}
?>

I am using the netbeans 6.9 IDE with PHP enabled, and (as you can probably guess) I have wamp server installed. Under PHP version 5.3 the netbeans debugger is telling me that "Parse error: parse error in C:\wamp\www\CustomerApp_v2\Agents\AgentPages.php on line 20". Under 5.2.11 it says something about unexpected T_NEW on that line. I have cut out a large comment on this, before line 20, but I can tell you that line 20 is the declaration of $pages. I have an empty constructor for each class at the moment.

I have also tried the following line instead of line 20:

$AgentList = new AgentList();

This doesnt work either - I get the same error. According to all the tutorials I have looked at there is nothing wrong with my code - I am probably just overlooking something obvious though.

Does anyone have any idea what I am doing wrong? I have done lots of PHP object oriented stuff before now, but the last time I touched it was 2 years ago.

Thanks in advance.

Regards,

Richard

+2  A: 

The problem is that you're trying to initialize an instance variable in a declaration with an expression (a call to new is an expression). That doesn't work. Put the assignment in the constructor and it will work.

Like this:

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

    private $pages;

}
staticsan
Yes thats it.. dont know why I didnt even think to do that..Thanks..Richard
ClarkeyBoy
PS I will mark this as the answer later, but right now sleep seems more important to me.. :)
ClarkeyBoy