se servir des functions dans les class

Eléphanteau du PHP | 32 Messages

01 avr. 2011, 10:30

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

Eléphant du PHP | 398 Messages

01 avr. 2011, 11:23

Il manque les parenthèses
$a = new AA();
echo $a->AAC();
et j avais oublié ça :
 public function AAc(){
      return $this->AAb();
   }
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

Eléphanteau du PHP | 32 Messages

01 avr. 2011, 11:31

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 ?

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

01 avr. 2011, 11:31

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.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 32 Messages

01 avr. 2011, 11:57

vraiment merci beaucoup pour ces precisions

devlop78
Invité n'ayant pas de compte PHPfrance

14 avr. 2011, 00:02

Une lecture sur la POO PHP serait le meilleur conseil que je pourrais te donner.

Eléphanteau du PHP | 32 Messages

14 avr. 2011, 00:31

Une lecture sur la POO PHP serait le meilleur conseil que je pourrais te donner.
Je connais en .net mais pas en php

devlop78
Invité n'ayant pas de compte PHPfrance

15 avr. 2011, 00:51

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.

Eléphanteau du PHP | 32 Messages

15 avr. 2011, 08:01

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

devlop78
Invité n'ayant pas de compte PHPfrance

23 avr. 2011, 03:42

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.

Eléphanteau du PHP | 32 Messages

28 avr. 2011, 09:10

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