Page 1 sur 1

se servir des functions dans les class

Posté : 01 avr. 2011, 10:30
par polpaulin
bonjour
PHP 5

comment faire pour que ce code marche ?

Code : Tout sélectionner

<?php class AA{ public function AAb(){ return 'AAb'; } public function AAc(){ return $this->AAb; } } $AA = new AA; echo AA::AAc; //ou echo $AA->AAc; ?>
ou celui ci ?

Code : Tout sélectionner

class BB{ public $bb = ''; public function BBb(){ $this->bb = 'AAb'; } public function BBc(){ return $this->BBb; } } $BB = new BB; echo BB::BBc; //ou echo $BB->BBc;
je n'arrive pas a comprendre pourquoi je ne peux pas echanger des valeurs dans une class de cette maniere en php 5

merci pour l'aide

Re: se servir des functions dans les class

Posté : 01 avr. 2011, 11:23
par BaLiSTiK
Il manque les parenthèses
$a = new AA();
echo $a->AAC();
et j avais oublié ça :
 public function AAc(){
      return $this->AAb();
   }

Re: se servir des functions dans les class

Posté : 01 avr. 2011, 11:31
par polpaulin
ha merci ! ça marche

mais quelle serait la meilleur méthode la class AA ou BB qui passe par une variable ? ou une autre methode ?

Re: se servir des functions dans les class

Posté : 01 avr. 2011, 11:31
par sadeq
Bonjour,

L'appel des méthodes que tu fais sous la forme "class::méthode" est un appel statique où la classe et la méthode doivent être statiques. De ce fait, on n'a pas besoin d'instancier la classe en créant un objet avec New.
L'appel sous la forme "objet de class->méthode" est un appel dynamique via une instance d'objet créée par New. C'est ce dernier qui doit être utilisé normalement quand tu utilises la référence dynamique "$this" dans le code de la classe alors que l'usage statique exige la référence statique "self".

Formalisme:
$this->membre : référence dynamique à un membre (propriété (variable) ou méthode (fonction))
self::$propriété : référence statique à une propriété (variable)
self::méthode() : référence statique à une méthode (fonction)

Voici la forme correcte:
<?php
class  AA{
   
   public function AAb(){
      return 'AAb';
   }
   
   public function AAc(){
      return $this->AAb(); // appel de la méthode AAb() par $this (utilisable en cas d'instanciation de la classe)
   }
   
}
// instanciation de la classe AA
$AA = new AA();
echo $AA->AAc(); // appel de la méthode AAc() de la classe AA via l'objet $AA
?>
Et l'autre:
<?php 
class  BB {
   public $bb = '';
   
   public function BBb(){
      $this->bb = 'AAb'; // affectation de la propriété bb par $this (utilisable en cas d'instanciation de la classe)
      return $this->bb; // retourne la valeur de bb modifiée
   }
   
   public function BBc(){
      return $this->BBb(); // appel de la méthode BBb() par $this (utilisable en cas d'instanciation de la classe)
   }
   
}
// instanciation d'un objet de la classe BB
$BB = new BB();
echo $BB->BBc(); // appel de la méthode BBc() de la classe BB via l'objet $BB
?>
Voici la version d'usage d'une classe en mode statique:
<?php 
class  BB {
   static $bb = ''; // propriété statique destinée à un usage statique de la classe (sans instanciation)
   
   public function BBb(){
      self::$bb = 'AAb'; // affectation de la propriété statique bb par self (utilisable en cas de non instanciation de la classe)
   	  return self::$bb; // retourne la valeur de bb modifiée
   }
   
   public function BBc(){
      return self::BBb(); // appel de la méthode BBb() par par self (utilisable en cas de non instanciation de la classe)
   }
   
}

// usage des membres statiques de la classe BB sans instancier la classe par un NEW
echo BB::BBc(); // appel de la méthode statique BBc()
// ou
echo BB::$bb; // affichage de la propriété statique $bb
?>
Remarque: La propriété $bb de la classe BB est déclarée statique avec le modificateur "static" et ne doit être publique car l'accès à cette propriété par les programme va se faire en mode statique via la classe avec le formalisme suivant:
  • self::$bb dans la classe elle-même
    BB:$bb hors de la classe dans un autre programme qui utilise la classe statique.
Et même raisonnement pour les méthodes (fonctions) statiques.

Re: se servir des functions dans les class

Posté : 01 avr. 2011, 11:57
par polpaulin
vraiment merci beaucoup pour ces precisions

Re: se servir des functions dans les class

Posté : 14 avr. 2011, 00:02
par devlop78
Une lecture sur la POO PHP serait le meilleur conseil que je pourrais te donner.

Re: se servir des functions dans les class

Posté : 14 avr. 2011, 00:31
par polpaulin
Une lecture sur la POO PHP serait le meilleur conseil que je pourrais te donner.
Je connais en .net mais pas en php

Re: se servir des functions dans les class

Posté : 15 avr. 2011, 00:51
par devlop78
Je n'en doute pas, bien que je ne connaisse pas de langage nommé .net (peut-être parles-tu de C#.NET ?). La différence avec C# et PHP est assez importante, et si tu as les connaissances en C# qui est en full objet, tu n'auras donc aucune difficulté à apprendre le PHP OO. Des petits tuto sont disponibles, par exemple sur le site du zéro, ou bien sur php.net directement.

Re: se servir des functions dans les class

Posté : 15 avr. 2011, 08:01
par polpaulin
Je n'en doute pas, bien que je ne connaisse pas de langage nommé .net (peut-être parles-tu de C#.NET ?). La différence avec C# et PHP est assez importante, et si tu as les connaissances en C# qui est en full objet, tu n'auras donc aucune difficulté à apprendre le PHP OO. Des petits tuto sont disponibles, par exemple sur le site du zéro, ou bien sur php.net directement.
oui C# ou vb.net, le problème pour moi en php ce sont les objets non typés ainsi que l’absence de collections d'objets

merci pour l'info

Re: se servir des functions dans les class

Posté : 23 avr. 2011, 03:42
par devlop78
Les objets sont tous typés en PHP, par contre aucun typage fort n'est appliqué. C'est effectivement une grosse différence avec C# et pour ma part, je trouve que bien qu'il s'agit d'une souplesse agréable à l'usage, c'est aussi un défaut. Une exemple bête est justement la collection d'objets, qui ne fonctionnera ... qu'avec des objets. Il est assez inutile d'en créer une pour des chaines de caractères, par exemple, et encore que.

Pour revenir sur la collection, la SPL propose des classes et interfaces intéressantes.

D'autre part, j'ai moi-même conçu une classe Collection en fonction de mes besoins, et c'est rapide à développer. Ce n'est malheureusement pas natif, et on regrette justement son absence.

Re: se servir des functions dans les class

Posté : 28 avr. 2011, 09:10
par polpaulin
Les objets sont tous typés en PHP, par contre aucun typage fort n'est appliqué. C'est effectivement une grosse différence avec C# et pour ma part, je trouve que bien qu'il s'agit d'une souplesse agréable à l'usage, c'est aussi un défaut. Une exemple bête est justement la collection d'objets, qui ne fonctionnera ... qu'avec des objets. Il est assez inutile d'en créer une pour des chaines de caractères, par exemple, et encore que.

Pour revenir sur la collection, la SPL propose des classes et interfaces intéressantes.

D'autre part, j'ai moi-même conçu une classe Collection en fonction de mes besoins, et c'est rapide à développer. Ce n'est malheureusement pas natif, et on regrette justement son absence.
oui en natif les collections seraient un plus , je trouve que c'est une merveille à utiliser
des vrais enum seraient aussi bienvenus