Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1567 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Retour de metode static assignée par reference

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Retour de metode static assignée par reference

n°1411198
esox_ch
Posté le 21-07-2006 à 16:54:26  profilanswer
 

Bonjour,
Dans le cadre de mon CMS je suis tombé sur un problème:
J'ai une classe maClasse qui contient 1 attribut static monAttribut et une metode static maMetode, cette dernière retournant monAttribut.
Maintenant, depuis une autre classe X, si je fais :
 
$this->var =& maClasse::maMetode();
 
il me sort que je n'ai pas le droit de passer une metode par reference (c'est pas vraiment ce que je voulais faire mais bon.. [:pingouino])
Donc pour le moment je m'en sors avec un minable
 
$this->var =& maClasse::monAttribut;
 
Mais c'est crade, parceque j'ai du mettre monAttribut en public et du coup maMetode me sert plus à rien.
 
Est-ce que qqn voit où je me plante?
 
Merci bien


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
mood
Publicité
Posté le 21-07-2006 à 16:54:26  profilanswer
 

n°1411475
esox_ch
Posté le 22-07-2006 à 16:33:01  profilanswer
 

Bonjour,
Je viens de résoudre mon problème,
 
Enfait j'avais pas vu que pour décréter qu'une fonction retourne une variable (et non un objet) par reference, elle doit être définie comme  
 
function &maFonction()
{
...
}
 
Du coups maintenant le  
 
$this->var =& maClasse::maMetode();  
 
Passe sans problèmes.


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1411698
gizmo
Posté le 23-07-2006 à 13:15:08  profilanswer
 

Euh... suis-je le seul à penser que ce que tu demandes est une abérration conceptuelle?

n°1411709
esox_ch
Posté le 23-07-2006 à 13:34:45  profilanswer
 

Peux tu expliciter le fond de ta pensée ? :)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1411720
gizmo
Posté le 23-07-2006 à 14:02:13  profilanswer
 

Bien sur. Si tu cherches à passer une valeur de retour par référence, c'est généralement soit pour économiser de la place mémoire, soit pour pouvoir faire des modification directement sur l'objet.
 
Si tu veux le faire pour la première option, c'est généralement que tu en est arrivé à un point critique de ton développement et que tes ressources arrivent à saturation. Dans ce cas, tu auras au préalable fixé tes spécifications pour cette partie du code de tel sorte qu'elle ne puisse plus être modifiée car fortement dépendante de ton implémentation et non plus des concepts. Ce sont des cas qui ne se justifient que très rarement.
 
Si c'est pour la seconde option que tu veux appliquer cette méthode, tu casses tout ton principe d'accesseur. En faisant un passage par référence, tu n'obliges plus l'utilisateur à passer par tes accesseurs pour modifier ton objet, et dans ce cas ton getter est totalement inutile. Si tu as, ou prélable, pris la précaution de dupliquer ta variable statique pour en retourner une copie, c'est ta variable statique qui n'a plus de raison d'être puisqu'elle n'est jamais manipulée et sert, au mieux, de squelette.
 
Pour résumé, si tu es dans le premier cas, php n'est sans doute pas la solution, si tu es dans le second, tu bousilles tout méchanisme de validation que tu aurais pu mettre en place.

n°1411905
esox_ch
Posté le 23-07-2006 à 22:31:36  profilanswer
 

Salut :)
 
Donc effectivement ce n'est pas le 1er cas de figure.
 
Je t'explique mon "raisonnement". J'ai plusieurs metodes, dans plusieurs classes differentes qui requierent une connection à une base de donnée. J'ai créé un objet DataBase qui me permet de mettre un niveau d'abstraction par rapport à la base. Le problème est que je voudrais eviter de devoir à chaque fois creer un nouvel Objet (parceque le constructeur fait pleins de trucs, et j'ai pas besoin qu'il les refasse 15 fois par page :o). Au debut je passais par parametre l'objet Database à toutes les classes ... Mais c'est un peu usant à force ... Du coup j'ai pensé a une variable statique.
La reference decoule d'un bidouillage (et c'est probablement la que c'est pas bien ce que je fais). Enfait par pure paresse, plutot que d'appeler l'objet statique à chaque fois que j'en ai besoin, j'ai fait ça :

Code :
  1. public function __construct(){
  2. ...
  3. $this->db = DatabaseBS::getInstance();
  4. ...
  5. }

et j'ai fait ça dans toutes les classes qui en ont besoin, du coup j'utilise un $this->db, ce qui est plus rapide à ecrire. Et la référence? C'est juste pour que si qqch arrive à la connection (ouverture, fermeture,...) tout le monde soit bien d'accord sur son statut.
 
J'espere avoir été clair ...  
A bientot


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1411941
gizmo
Posté le 23-07-2006 à 23:37:29  profilanswer
 

Bon, dans ce cas, ce que tu veux, c'est ce que l'on appelle un Singleton. Vu que tu utilises du php5, tes objets sont passé par référence pour ce qui est du retour des fonctions.
 
Example:

Code :
  1. <?php
  2. class test {
  3. public static $toto = null;
  4. public $val = null;
  5. public static function getInstance() {
  6.  if(test::$toto === null) {
  7.   test::$toto = new test();
  8.  }
  9.  return test::$toto;
  10. }
  11. private function __construct() {
  12.  $this->val = 2;
  13. }
  14. }
  15. $bla = test::getInstance();
  16. $blu = test::getInstance();
  17. $blu->val = 3;
  18. echo $bla->val;
  19. ?>


Comme résultat d'output, tu auras bien 3 et non plus deux. $bla et $blu partageant la même instance. Et comme php ne gère pas de thread, pas besoin de faire plus poussé pour les méchanismes d'initialisation.


Message édité par gizmo le 23-07-2006 à 23:37:44
n°1411948
esox_ch
Posté le 24-07-2006 à 00:01:36  profilanswer
 

Ok, merci :jap:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Retour de metode static assignée par reference

 

Sujets relatifs
JS : Reference à une propriété d'un elementRetour chariot dans un tableau
erreur: reference d'objet pas défini à une instanceWarning suite a utilisation d'une référence dans une méthode [RESOLU]
rafrachissement de page: retour en haut de pageMapping d'une méthode static vers Delphi
référence indéfinie vers « __ctype_b » [Résolu]Code de retour FTP.Exe
[Shell] Remplacement de retour chariotDesactiver les avertissements d'expiration lors d'un retour
Plus de sujets relatifs à : Retour de metode static assignée par reference


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR