Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 29/11/2012, 14h16   #1
HurtMarley
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 96
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 96
Points : 34
Points : 34
Par défaut POO Appel de methodes en cascade

Bonjour,

J'ai un objet pour lequel je voudrai appeler une de ses méthode en cascade. Pour des raisons de facilité je voudrai déclarer et utiliser des variables a la volée comme en Java, mais je suis confronté au problème suivant :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class String{
	private $chaine;
 
	public function __construct(){
            if (func_num_args() > 0){$this->chaine = func_get_args()[0];}
            else $this->chaine = null;
        }
 
 
        public function get(){
            return $this->chaine;
        }
 
	public function concat(String $str){
            $this->chaine .= $str->get();
        }
 
	public function afficher(){
            echo($this->chaine);
        }
}

Code :
1
2
3
4
5
6
7
8
9
 
//cas ok
$titi = new String("titi ");
$toto = new String("toto ");
$toto->concat($titi);
$toto->concat($titi);
$toto->afficher();
 
-> toto titi titi
Code :
1
2
3
4
5
6
 
 
//cas ko
$toto->concat($titi->concat($titi));
 
-> Argument 1 passed to String::concat() must be an instance of String, null given, called in
Code :
1
2
3
4
5
//cas ko
$toto->concat($titi)->concat($titi);
 
 
-> Call to a member function concat() on a non-object in  ...
Code :
1
2
3
4
5
6
7
 
//cas ko
$titi = new String("titi ");
$toto = (new String("toto "))->concat($titi);
$toto->afficher();
 
-> Call to a member function afficher() on a non-object

Auriez vous svp une idee de la cause de mon problème.

Merci d'avance
HurtMarley est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2012, 14h32   #2
selmouadin
Membre régulier
 
Homme Said ELMOUADIN
Développeur Web
Inscription : mai 2012
Messages : 57
Détails du profil
Informations personnelles :
Nom : Homme Said ELMOUADIN
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2012
Messages : 57
Points : 91
Points : 91
Salut,

ta methode concat attend comme argument une instance de l'objet String et toi tu lui passe une chaine de caractère
selmouadin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2012, 14h36   #3
HurtMarley
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 96
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 96
Points : 34
Points : 34
Bonjour,

J'y passe bien des instances d'objet String

=>
Code :
1
2
$titi = new String("titi ");
$toto = new String("toto ");


ps : serait il possible de déplacer ce message dans la partie "syntaxe" du forum ... erreur de ma part.
HurtMarley est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2012, 15h13   #4
gototog
Membre expérimenté
 
Homme Renaud B
Inscription : septembre 2009
Messages : 370
Détails du profil
Informations personnelles :
Nom : Homme Renaud B
Âge : 23
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : septembre 2009
Messages : 370
Points : 504
Points : 504
Code :
1
2
3
4
public function concat(String $str){
  $this->chaine .= $str->get();
  return $this
}
Je pense que maintenant tu peux faire
Code :
$toto->concat($titi)->concat($titi);
gototog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2012, 15h33   #5
HurtMarley
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 96
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 96
Points : 34
Points : 34
En effet merci beaucoup.

je pensait pas que le return était obligatoire.
Du coup il recrée une instance Sting intermédiaire à chaque fois?
HurtMarley est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2012, 16h37   #6
gototog
Membre expérimenté
 
Homme Renaud B
Inscription : septembre 2009
Messages : 370
Détails du profil
Informations personnelles :
Nom : Homme Renaud B
Âge : 23
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : septembre 2009
Messages : 370
Points : 504
Points : 504
c'est pas du tout obligatoire, mais si tu veux pouvoir réutiliser une méthode sur ton objet, il faut que ta fonction renvoie un objet du type voulu. j'ai découvert ca avec les objets Criteria moi ^^
gototog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2012, 16h49   #7
grunk
Modérateur
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 2 499
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 28
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 2 499
Points : 5 209
Points : 5 209
Citation:
Du coup il recrée une instance Sting intermédiaire à chaque fois?
Non c'est une référence à l'instance déjà créer qui est retourné , donc un seul et unique objet.
__________________
Pry Framework php5 | Recherche CDI dev. Web sur Dijon et alentours.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h26.


 
 
 
 
Partenaires

Hébergement Web