2010-08-02 6 views
3

J'écris un système de gestion de la clientèle en PHP, pour une utilisation hors ligne (c'est-à-dire sur l'ordinateur client). J'ai envisagé d'utiliser Java ou C# mais je suis arrivé à la conclusion qu'il est plus facile de laisser le navigateur faire toute la mise en page pour moi, et que l'entreprise installe wamp sur leurs ordinateurs.Pourquoi ne puis-je pas déclarer une variable d'instance en tant que tableau d'objets dans PHP?

Grâce à cette interface, ils seront également en mesure de gérer les agents (c'est-à-dire les vendeurs qui font le tour de leur région pour obtenir des commandes pour l'entreprise, au cas où ils ne le sauraient pas). C'est la section que j'utiliserai dans ce post pour montrer le problème que j'ai.

Fondamentalement, j'ai 4 classes - AgentPages, AgentList, AgentDetails et AgentForm. AgentForm aura deux modes - modifier et nouveau. AgentPages a une fonction appelée getPages, qui retourne un tableau d'instances des 3 autres classes. Cependant, il n'aime pas le "nouveau" mot-clé.

Mon code est le suivant (pour la classe AgentPages seulement):

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

J'utilise NetBeans 6.9 IDE avec PHP activé, et (comme vous pouvez le deviner) Je serveur WAMP installé. Sous PHP version 5.3, le débogueur netbeans me dit que "Erreur d'analyse: erreur d'analyse dans C: \ wamp \ www \ CustomerApp_v2 \ Agents \ AgentPages.php sur la ligne 20". En 5.2.11 il dit quelque chose à propos de T_NEW inattendu sur cette ligne. J'ai fait un gros commentaire là-dessus, avant la ligne 20, mais je peux vous dire que la ligne 20 est la déclaration de $ pages. J'ai un constructeur vide pour chaque classe en ce moment.

J'ai aussi essayé la ligne suivante à la place de la ligne 20:

$AgentList = new AgentList(); 

Ce travail ne marche pas non plus - je reçois la même erreur. D'après tous les tutoriels que j'ai regardés il n'y a rien de mal avec mon code - je suis probablement juste en train de négliger quelque chose d'évident.

Est-ce que quelqu'un a une idée de ce que je fais mal? J'ai fait beaucoup de choses orientées objet PHP avant maintenant, mais la dernière fois que j'ai touché il y a 2 ans.

Merci d'avance.

Cordialement,

Richard

Répondre

5

Le problème est que vous tentez d'initialiser une variable d'instance dans une déclaration avec une expression (un appel à new est une expression). Ça ne marche pas. Mettez l'affectation dans le constructeur et cela fonctionnera.

Comme ceci:

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

    private $pages; 

} 
+0

J'ai une question à ce sujet: est-il la meilleure pratique pour instancier votre tableau d'objets de classe dans un constructeur, ou cela peut-il être fait dans toute autre méthode de classe? (exemple: j'en ai un appelé 'calculateInvoiceTotal') – kmancusi

Questions connexes