Почему я не могу объявить переменную экземпляра как массив объектов в PHP? - PullRequest
3 голосов
/ 02 августа 2010

Я пишу систему управления клиентами на PHP, для использования в автономном режиме (то есть на клиентском компьютере). Я подумал об использовании Java или C #, но пришел к выводу, что браузеру проще сделать всю компоновку для меня, а компании просто установить wamp на свои компьютеры.

Через этот интерфейс они также смогут управлять агентами (т. Е. Продавцами, которые ходят по своей территории, получая заказы для компании, в случае, если кто-то не знает). Это раздел, который я буду использовать в этом посте, чтобы продемонстрировать мою проблему.

В основном у меня есть 4 класса - AgentPages, AgentList, AgentDetails и AgentForm. AgentForm будет иметь два режима - редактировать и новый. В AgentPages есть функция getPages, которая возвращает массив экземпляров трех других классов. Однако ему не нравится ключевое слово "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;
    }
}
?>

Я использую IDE NetBeans 6.9 с включенным PHP, и (как вы можете догадаться) у меня установлен wamp-сервер. В PHP версии 5.3 отладчик netbeans сообщает мне: «Ошибка разбора: ошибка разбора в C: \ wamp \ www \ CustomerApp_v2 \ Agents \ AgentPages.php в строке 20». В 5.2.11 это говорит о неожиданном T_NEW в этой строке. Я вырезал большой комментарий по этому вопросу до строки 20, но могу сказать, что строка 20 - это объявление $ страниц. В настоящий момент у меня есть пустой конструктор для каждого класса.

Я также пробовал следующую строку вместо строки 20:

$AgentList = new AgentList();

Это тоже не работает - я получаю ту же ошибку. Согласно всем учебным пособиям, в которых я ознакомился, в моем коде нет ничего плохого - хотя, возможно, я просто упускаю из виду нечто очевидное.

Кто-нибудь знает, что я делаю не так? До этого я делал много объектно-ориентированного PHP-материала, но в последний раз я обращался к нему 2 года назад.

Заранее спасибо.

С уважением,

Richard

1 Ответ

5 голосов
/ 02 августа 2010

Проблема в том, что вы пытаетесь инициализировать переменную экземпляра в объявлении с помощью выражения (вызов new является выражением). Это не работает Поместите назначение в конструктор, и оно будет работать.

Как это:

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

    private $pages;

}
...