Problème de méthodes

Eléphanteau du PHP | 35 Messages

03 sept. 2008, 09:42

Bonjour à tous,

Je me met enfin à la POO en PHP mais j'ai quelque problème récurent. La classe ci-dessous m'affiche ceci:

Notice: Undefined variable: version in /var/www/html/eos/noyau.php on line 15
Fatal error: Cannot access empty property in /var/www/html/eos/noyau.php on line 15
J'avoue que je ne comprend pas pourquoi il me dit ceci...


Merci de votre aide je suis sur que c'est moi qui m'y prend très très mal.
<?php
class Noyau {
	var $version;
	var $title;

	public function __construct()  {
		$this->$version="0.0.0.1";
		$this->$title="Noyau CMS Eos";
	}

	public function afficheVersion() {
		$noyau = new Noyau();
		return $noyau;
	}
}

$noyau=new Noyau();

echo $Version = $noyau->afficheVersion();

?>

Eléphant du PHP | 139 Messages

03 sept. 2008, 09:43

en objet, on déclare les variables avec $ (var $version) mais on les appel sans ( $this->version )

La solution est là :)

Eléphanteau du PHP | 35 Messages

03 sept. 2008, 10:03

Ah oki merci de l'information... Je vais venir vous embêter beaucoup en ce moment tenez vous prêt :D

Maintenant il me dit ceci:
Catchable fatal error: Object of class Noyau could not be converted to string in /var/www/html/eos/noyau.php on line 29
<?php

class Noyau {
	var $version;
	var $title;

	public function __construct()  {
		$this->version="0.0.0.1";
		$this->title="Noyau CMS Eos";
	}

	public function afficheVersion() {
		$noyau = new Noyau();
		return $noyau;
	}
}

$noyau=new Noyau();

$Version = $noyau->afficheVersion();

echo $Version;

?>
Donne moi des indices on va jouer à cache cache avec les bug :)

Non je plaisante mais c'est vrai que c'est en faisant des erreurs qu'on apprend plus vite...

Merci de ton aide

Eléphanteau du PHP | 36 Messages

03 sept. 2008, 10:21

Depuis PHP5.2, il n'est plus possible de faire un echo devant un objet ( ou de le caster en string ) , si celui-ci ne possède pas de méthode magique __toString()
<?php
class Anaska
{
     public function __toString()
    {
        return 'class!';
    }
}

$a = new Anaska;
echo $a // affiche class!
Tant qu'on y est :
  • __toString doit obligatoirement retourner un type string ( logique, mais return 1 ne fonctionnera pas, plutôt return '1')
    Il n'est pas possible d'envoyer une exception dans cette méthode ( et ça nous embette pas mal, on motive le PHPGroup pour enlever cette restriction )
    La méthode doit être publique, comme toutes les méthodes magiques, depuis PHP5.3[/code]

Note à titre d'information :) :
  • La classe Exception utilise cette méthode
    La classe SimpleXMLElement aussi, elle affiche le contenu du noeud si celui-ci n'a plus d'enfants (noeud texte)
    La classe Zend_Db_Select du ZendFramework écrit la requête que l'objet contient
    etc...
Julien Pauli - Formateur pôle PHP ZendFramework chez Anaska
Contributeur au projet Zend Framework
Ma page de tutoriaux, mon blog

Eléphanteau du PHP | 38 Messages

03 sept. 2008, 10:58

Ne serait il pas plus simple si tu retournais $this->version dans ta méthode afficheVersion() ?

ViPHP
ViPHP | 5924 Messages

03 sept. 2008, 11:03

Pourquoi faire simple quand on peut faire compliqué :)

Eléphanteau du PHP | 36 Messages

03 sept. 2008, 11:13

Oui, il est vrai que l'exemple est un code mal construit, un genre de pattern composite, mais dont je saisis mal l'utilité :P
Julien Pauli - Formateur pôle PHP ZendFramework chez Anaska
Contributeur au projet Zend Framework
Ma page de tutoriaux, mon blog

Eléphanteau du PHP | 35 Messages

03 sept. 2008, 11:14

Bon j'arrive à afficher la version et le titre.

Merci à vous si vous voyez des problèmes dites le moi que je prennent les bonnes habitudes directement.

Merci à vous

ViPHP
ViPHP | 5924 Messages

03 sept. 2008, 11:27

Oui, il est vrai que l'exemple est un code mal construit, un genre de pattern composite, mais dont je saisis mal l'utilité :P
Genre
echo $noyau->afficheVersion()->afficheVersion()->afficheVersion()->afficheVersion()->afficheVersion();
? :mrgreen:
Modifié en dernier par Sékiltoyai le 03 sept. 2008, 11:37, modifié 1 fois.

Eléphanteau du PHP | 35 Messages

03 sept. 2008, 11:34

Je ne comprend pas ce que vous dites ?

Expliquez vous que je rigole aussi :lol:

ViPHP
ViPHP | 5924 Messages

03 sept. 2008, 11:38

Je ne comprend pas ce que vous dites ?

Expliquez vous que je rigole aussi :lol:
Bah c'est la construction qui est un peu drôle quoi…

Eléphanteau du PHP | 35 Messages

03 sept. 2008, 11:49

Oui mais pourquoi tu trouve cela drôle je me trompe quelque part ?

ViPHP
ViPHP | 5924 Messages

03 sept. 2008, 11:57

Bah c'est inutile de faire ce que tu fais, c'est tout.
Tout est là :
Ne serait il pas plus simple si tu retournais $this->version dans ta méthode afficheVersion() ?

Eléphanteau du PHP | 35 Messages

03 sept. 2008, 11:59

Je n'ai pas dit que c'était utile j'essaie juste de comprendre la POO en faisant des scripts inutile 8-)

Eléphanteau du PHP | 38 Messages

03 sept. 2008, 12:16

"Inutile" n'était pas à prendre dans le sens 'qui ne servira pas plus tard', mais plutôt 'il y a une manière plus facile de faire ce que tu veux'.