mon constructeur ne fonctionne pas ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : mon constructeur ne fonctionne pas ?

par Gofromiel » 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.

++

par Hywan » 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).

par x@v » 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 ?

par Hywan » 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 ;-).

par titerm » 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 ?

par x@v » 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 ?

par titerm » 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

par x@v » 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;

par AB » 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...

par titerm » 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é.

par Sékiltoyai » 14 févr. 2008, 02:22

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

par x@v » 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 />';
}*/
?>

par Sékiltoyai » 14 févr. 2008, 01:16

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

mon constructeur ne fonctionne pas ?

par x@v » 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 />';
?>