IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Premier essai de POO


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [POO] Premier essai de POO
    Bonjour,

    Je tente mes premières expérimentations en POO.
    Je n'ai pas encore intégré tous le verbage mais il faut bien commencer.
    J'ai un problème avec le script suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    <?php
    class Test
    {
    	protected $view = array();
    	protected $output = array();
     
    	public function setOutput($data)
    	{
    		$this->output['data'] = $data;
    	}
     
    	public function setCurrentview($view)
    	{
    		$this->view['current'] = $view;
    	}
     
    	public function getCurrentView()
    	{
    		return $this->view['current'];
    	}
     
    	public function getData($view)
    	{
    		$provider = outputFactoryProvider::createOutput($view);
    		$provider->getOutput($view);
    	}
     
    	public function outputContent()
    	{
    		return $this->output;
    	}
     
    }
     
    interface outputProvider
    {
    	public function getOutput($view);
    }
     
    class OutputDefaultProvider implements outputProvider
    {
    	public function getOutput($view)
    	{
    		$cc = new CommandChain();
    		$cc->addCommand( new categoryCommand() );
    		$cc->runCommand( 'category', $view );
    	}
    }
     
    class outputFactoryProvider
    {
    	public static function createOutput($view)
    	{
    		switch($view) {
    			default:
    				return new OutputDefaultProvider();		
    				break;
    		}
    	}
    }
     
    interface ICommand
    {
    	function onCommand($name, $args);
    }
     
    class CommandChain
    {
    	private $_commands = array();
     
    	public function addCommand($cmd)
    	{
    		$this->_commands[] = $cmd;
    	}
     
    	public function runCommand($name, $args)
    	{
    		foreach($this->_commands as $cmd)
    		{
    			if ($cmd->onCommand($name, $args))
    				return;
    		}
    	}
    }
     
    class categoryCommand extends Test Implements ICommand
    {
     
    	public function onCommand($name, $args)
    	{
    		$data = 'categoryCommand handling category<br/>';
    		parent::setOutput($data);
    		$this->output['category'] = 'category';
    		//print_r($this->output);
    	}
    }
    ?>
    Avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    $Test = new Test;
    $Test->setCurrentView('testok');
    $Test->getData( $Test->getCurrentView() );
    print_r( $Test->outputContent() );
    ?>
    outputContent me renvoi NULL.
    le code mis en commentaire lui me renvoi bien les array.

    Pourquoi mon objet est vide à la fin du script?

  2. #2
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    Salut,

    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Oups!

    J'ai mal recopié sur le forum :p

    Lors de mon test j'avais bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $Test = new Test();
    De la même façon, j'ai aussi mal recopié ici cette partie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return $this->output['data']; //a la place de return $this->output;

    Mais mon objet me renvoi toujours NULL

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Je viens de me rendre compte d'une éventuelle erreur.
    J'instancie la classe Test(), puis plus tard avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $cc->addCommand( new categoryCommand() );
    une de ces classe fille.

    Est ce que ça ne pose pas problème ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Points : 25
    Points
    25
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class outputFactoryProvider
    {
    	public static function createOutput($view)
    	{
    		switch($view) {
    			default:
    				return new OutputDefaultProvider();		
    				break;
    		}
    	}
    }
    Tu n'utilises pas l'argument $view. Donc ta fonction statique renvoie un nouvel objet OutputDefaultProvider... Vide ! (cette classe n'a pas de constructeur)

    Tu peux essayer de faire $obj=new OutputDefaultProvider(); return $obj->getOutput($view);

    Ou alors déclarer getOutput en static et faire return OutputDefaultProvider::getOutput($view);

    Si ce code est vraiment ton premier essai de POO. Je crois que tu devrais commencer par les bases, les objets, instanciation et utilisation, en laissant de côté les interfaces, les héritages.
    Une fois que tu maîtriseras un peu tout ça, regarde du côté des méthodes statiques et examine les classes singleton (c'est lié...).

Discussions similaires

  1. [PHP 5.2] [POO] premier script en POO
    Par yann18 dans le forum Langage
    Réponses: 1
    Dernier message: 02/09/2009, 13h55
  2. [POO] site web en poo
    Par gforce dans le forum Langage
    Réponses: 13
    Dernier message: 28/04/2006, 18h59
  3. [Débutant] Premier essai DirectX9 - Question
    Par stebar dans le forum DirectX
    Réponses: 4
    Dernier message: 30/12/2005, 14h39
  4. [Kylix] Premier essai
    Par alcaloide dans le forum EDI
    Réponses: 7
    Dernier message: 24/12/2005, 15h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo