Page 1 sur 1
Problème de méthodes
Posté : 03 sept. 2008, 09:42
par akrogames
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();
?>
Posté : 03 sept. 2008, 09:43
par Vurtu
en objet, on déclare les variables avec $ (var $version) mais on les appel sans ( $this->version )
La solution est là

Posté : 03 sept. 2008, 10:03
par akrogames
Ah oki merci de l'information... Je vais venir vous embêter beaucoup en ce moment tenez vous prêt
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
Posté : 03 sept. 2008, 10:21
par doctorrock
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...
Posté : 03 sept. 2008, 10:58
par B.Moncef
Ne serait il pas plus simple si tu retournais $this->version dans ta méthode afficheVersion() ?
Posté : 03 sept. 2008, 11:03
par Sékiltoyai
Pourquoi faire simple quand on peut faire compliqué

Posté : 03 sept. 2008, 11:13
par doctorrock
Oui, il est vrai que l'exemple est un code mal construit, un genre de pattern composite, mais dont je saisis mal l'utilité

Posté : 03 sept. 2008, 11:14
par akrogames
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
Posté : 03 sept. 2008, 11:27
par Sékiltoyai
Oui, il est vrai que l'exemple est un code mal construit, un genre de pattern composite, mais dont je saisis mal l'utilité

Genre
echo $noyau->afficheVersion()->afficheVersion()->afficheVersion()->afficheVersion()->afficheVersion();
?

Posté : 03 sept. 2008, 11:34
par akrogames
Je ne comprend pas ce que vous dites ?
Expliquez vous que je rigole aussi

Posté : 03 sept. 2008, 11:38
par Sékiltoyai
Je ne comprend pas ce que vous dites ?
Expliquez vous que je rigole aussi

Bah c'est la construction qui est un peu drôle quoi…
Posté : 03 sept. 2008, 11:49
par akrogames
Oui mais pourquoi tu trouve cela drôle je me trompe quelque part ?
Posté : 03 sept. 2008, 11:57
par Sékiltoyai
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() ?
Posté : 03 sept. 2008, 11:59
par akrogames
Je n'ai pas dit que c'était utile j'essaie juste de comprendre la POO en faisant des scripts inutile

Posté : 03 sept. 2008, 12:16
par B.Moncef
"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'.