mon constructeur ne fonctionne pas ?

x@v
Mammouth du PHP | 570 Messages

14 févr. 2008, 00:51

Bonjour,
je cherche à faire mes "classes".
mais je n'arrive pas à afficher un echo ?
<?phpclass toto {
private $o;
private $bb;
	public function __construct($o)
	{	
		$this->$o=$o;
	}
	public function e()
	{
		echo $this->$o='sdfghfdghfdghfdsddddddddddddddddddddddddddddd';
	}
}
?>
en java si je met une variable dans le constructeur de ma classe, je dois crée un objet avec un paramètre... je suis perdu
<?php
include('./testClasse.php');
$ok= new Toto('sdghjkhgf');
print $ok;
echo $ok->e.'<br />';
?>

ViPHP
ViPHP | 5924 Messages

14 févr. 2008, 01:16

Fais un var_dump() de ton objet, tu comprendras…

x@v
Mammouth du PHP | 570 Messages

14 févr. 2008, 02:01

Je ne comprend pas pourquoi ma propriété est null puisque je rentre une chaine en paramètre ?
j'ai refait ma classe et cette fois il ignore complètement les valeurs passé en paramètre, vraiment bizarre php5 ?
Je n'y comprend rien !
<?php
class Toto {
private $o;
	public function __construct($o)
	{	
		$this->$o=$o;
	}
	public function ete($o)
	{
		echo $this->$o.'ooooooooooooooooooooooooooooooooooooo';
	}
}
?>
<?php
include('./testClasse.php');
$oo= new Toto('sdghjkhgf');
 var_dump($oo);
echo '<br />'.$oo->ete('eeeeeeeeeeeeeeee');
/*include('http://localhost/agenda_d_or/connectionCLass.php');
$con=new ConnectionClass();
req_select('select * FROM agendaor');
while( $ligne = $resultats->fetch()) { // on récupère la liste des membres
echo 'Utilisateur : '.$ligne->mailH.'<br />';
echo 'Utilisateur : '.$ligne->mailF.'<br />';
echo 'Utilisateur : '.$ligne->idPersonne.'<br />';
}*/
?>

ViPHP
ViPHP | 5924 Messages

14 févr. 2008, 02:22

Tu n'aurais pas une autre propriété qui elle n'est pas nulle justement ?

Mammouth du PHP | 505 Messages

14 févr. 2008, 09:13

Tu fais une erreur de syntaxe dans cette ligne
 $this->$o=$o; 
Regarde attentivement dans la doc ou dans des exemples comment on accède à une propriété.

ViPHP
AB
ViPHP | 5818 Messages

14 févr. 2008, 11:55

Alors, toujours pas corrigé cette erreur ?
Tu as fait deux fois la même et titerm t'a mis le doigt dessus...

x@v
Mammouth du PHP | 570 Messages

14 févr. 2008, 12:44

je me réveille ;)
foutu $ ou pognon qui me fait perdre la nuit...
Merci
edit
par contre j'essaie :
include('./testClasse.php');
$oo= new Toto('sdghjkhgf');
 //var_dump($oo);
echo $oo;
echo '<br />'.$oo->ete('eeeeeeeeeeeeeeee');
après instanciation et....

Code : Tout sélectionner

Catchable fatal error: Object of class Toto could not be converted to string in /var/www/agenda_d_or/lecture.php on line 5
donc l'appel à un objet n'est pas possible ?
echo $oo;

Mammouth du PHP | 505 Messages

14 févr. 2008, 13:04

bah echo $oo, ca signifie que tu essaie de lui faire afficher une instance de l'objet Toto... Comment veux tu qu'il sache comment l'afficher ou le convertir en string si tu ne lui dit pas ???

Si tu veux etre capable de faire un echo sur un objet, il faut implémenter la méthode magic __toString() dans ta classe Toto

x@v
Mammouth du PHP | 570 Messages

14 févr. 2008, 13:15

function __tostring() {
return 'Toto';
}
Mais ce que je veux et qui est naturel en c++ ou java c'est pouvoir passer un objet dans une méthode d'un autre objet pour qu'il interagisse c'est là a mes yeux qu'on trouve toute la puissance de la POO.
tostring ne retourne qu'une chaine ?

Mammouth du PHP | 505 Messages

14 févr. 2008, 14:23

j'ai un peu de mal à te suivre...
le but de la magic tostring c'est d'être appeler implicitement lors qu'on fait un cast implicite ou explicite en string, donc oui, __tostring doit retourner une string, sinon, y a pas d'intéret.

Et tu peut tout à fait passer un objet à une methode en php5. De ce point vu la, y a pas grosse diff avec c++ ou java.

Peut tu etre un peu plus clair sur ce que tu essai ou souhaite faire exactement ?

ViPHP
ViPHP | 4674 Messages

15 févr. 2008, 14:28

Je pense comprendre que tu veux faire de la composition (ou encapsulation). C'est possible en PHP :
class A {

    private $monObjet = null;

    public function setMonObjet ( $obj = null ) {

        $this->monObjet = $obj;
    }
}
Si tu veux un objet précis en paramètre, il y a le typage par objet :
class B {

    private $monObjet = null;

    public function setMonObjet ( UnObjet $obj = null ) {

        $this->monObjet = $obj;
    }
}
Tu as également le mot-clé instanceof qui permet de vérifier ... l'instance ;-) :
if($obj instanceof MonObjet) { ... }
Voir la documentation ;-).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

x@v
Mammouth du PHP | 570 Messages

15 févr. 2008, 16:01

oui c'est ça agregation, encapsulation, compo...
Sa devrai suffire pour attaqué de plus gros morceau, donc on peut typer un paramètre avec un objet, c'est bien ça. Mes premières classe en php, sans faire exprès je mélangais java et php en faisant gaffe à l'encapsulation.

Code : Tout sélectionner

public class { private $maVar; public OOoo { ... }
c'est n'importe quoi (mdr)
Je trouve que php4 objet est mieux que php5 pour ce que j'en est vu.
constructeur du même nom que la class...

Quelle est la differente entre 5 et 4 ?

ViPHP
ViPHP | 4674 Messages

15 févr. 2008, 16:26

La gestion de l'objet. 4 est loin d'être mieux que 5. Ne serait-ce qu'au niveau des nombreux correctifs qui ont été apportés.
Il n'a qu'à regarder le manuel à la partie OOP 5 pour voir que PHP 5 est carrément plus puissant au niveau de l'objet. Je ne détaille, le manuel parle de lui-même. Si tu confonds PHP et Java, alors tourne toi vers PHP 5 plutôt que 4. PHP 5 à un comportement plus proche de Java.

Concernant le typage objet, il a un fonctionnement équivalent à Java, à savoir qu'on peut typer avec l'objet parent (si B, C et D hérite de A, on peut typer sur A, ce qui va tolérer tous les enfants de A, donc B, C et D).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 121 Messages

18 févr. 2008, 15:22

Je pense que le problème viens aussi du "$o"
public function __construct($o)
    {    
        $this->$o=$o;
    }
En effet, l'expression "$this->$o" n'est PAS DU TOUT ce qu'il faut, essaie plutôt "$this->o". Dans ton code le "$o" de "$this" est interprété avant de devenir un index de "$this". Comme dirait l'autre : c'est en codant n'importe comment que l'on obtient n'importe quoi.

++