renvoyer la référence à une primitive

renvoyer la référence à une primitive - PHP - Programmation

Marsh Posté le 15-05-2008 à 14:37:09    

bonjour
 
j'essaie de datatyper mes variables PHP5.
 
Ma problématiqu est la suivatne :
jessaie de trouver une alternative pour surcharger les opérateur "+=", "-=", "++", etc...
 
Je sais que la surcharge de méthodes fonctionne sous PHP5 mais pas la surcharge d'opérateur.
C'est donc a titre expérimental que j'ai essaie de contourner le problème.
 
j'ai la classe suivante
 

Code :
  1. class Chaine
  2. {
  3. public $value;
  4. public function Chaine($chaine) {
  5.  $this->value = $chaine;
  6. }
  7. public function __toString() {
  8.  return $this->value;
  9. }
  10. }


 
j'aimerais savoir s'il est possible avec la méthode __toString() non pas de renvoyer la valeur de $value
mais la référence à $value;
 
L'idée serait de pouvoir faire la chose suivante :
 

Code :
  1. $chaine = new Chaine('bonjour');
  2. $chaine += ' Pierre';


 
or pour l'instant je peux uniquement faire :
 

Code :
  1. $chaine = new Chaine('bonjour');
  2. $chaine->value += ' Pierre';


 
Une idée ?
merci

Reply

Marsh Posté le 15-05-2008 à 14:37:09   

Reply

Marsh Posté le 15-05-2008 à 15:43:26    

jokaritaff a écrit :


Code :
  1. $chaine = new Chaine('bonjour');
  2. $chaine->value += ' Pierre';



 
Quel est l'interet de transformer un type natif en classe, pour ensuite ne pas respecter les règles de la programmation orientée objet  :??:

Reply

Marsh Posté le 15-05-2008 à 15:53:53    

Reply

Marsh Posté le 15-05-2008 à 16:30:13    


Citation :

$chaine->value += ' Pierre';


 
Un objet avec un attribut public, ça ne respecte pas l'encapsulation ...
 
Bref, pour le faire en objet, pas moyen de faire autrement que $chaine->concat(' Pierre')
 
Mais en même temps, le PHP n'est pas complétement un langage orienté objet
 
Par ailleurs, l'opérateur de concaténation est le point.

Reply

Marsh Posté le 15-05-2008 à 16:38:45    

jokaritaff a écrit :

or pour l'instant je peux uniquement faire :
 

Code :
  1. $chaine = new Chaine('bonjour');
  2. $chaine->value += ' Pierre';



Ca fonctionne, ça ? [:pingouino] Déjà l'opérateur de concaténation est le point, ensuite __toString est appellé assez rarement automatiquement (avant PHP 5.3)

Reply

Marsh Posté le 15-05-2008 à 16:47:05    

-oui, erreur de frappe pour l'opérateur de concaténation PHP.
 
- Je sais que PHP est pas completement OO.
 
- je comprend tout a fait ce que tu veux dire concernant l'encapsulation des variables. D'ailleurs c'est pour ca que le modele que je vous montre me dérange beaucoup.
 
- Oui ca fonctionne $chaine->value , mais bon c pourri


Message édité par jokaritaff le 15-05-2008 à 16:47:44
Reply

Marsh Posté le 15-05-2008 à 16:48:50    

Ah ben oui ch'ui con, c'est une simple variable publique, je sais pas ce que j'ai lu :D

Reply

Marsh Posté le 15-05-2008 à 16:53:30    

FlorentG a écrit :

Ah ben oui ch'ui con, c'est une simple variable publique, je sais pas ce que j'ai lu :D


 
ouep elle est publique mais je suis beaucoup plus partisan de faire des  getters setters sur des membres privés
Donc mauvaise solution là.

Reply

Marsh Posté le 15-05-2008 à 16:54:23    

Bon sinon le seul moyen pour faire ce que tu veux faire... C'est modifier le core de PHP :( Y'a aucune autre solution malheureusement

Reply

Marsh Posté le 15-05-2008 à 16:56:19    

Encore un mec qui vient de C++ et qui veut faire la meme chose en PHP :D

Reply

Marsh Posté le 15-05-2008 à 16:56:19   

Reply

Marsh Posté le 15-05-2008 à 17:08:12    

FlorentG a écrit :

Bon sinon le seul moyen pour faire ce que tu veux faire... C'est modifier le core de PHP :( Y'a aucune autre solution malheureusement


 
ben allez c parti alors. hum.... :D  
bon je crois que je vais devoir revenir a des usages plus sages ! -_-'
 
Vanadium : non je viens pas de C++ du tout.  :lol:  
 
Ca serait cool que PHP fasse ce que les autres langages objet font.
C'est d'ailleurs un sacré débat : ya un fossé qui se creuse entre  
les simples utilisateur de PHP qui en font un usage perso limité  
et ceux qui en font dans un cadre professionnel et pour qui PHP peine a apporter des vraies bonnes solutions OO.
 
Même PHP6 n'a pas l'air d'apporter un grand lot de fonctionnalités même si elles sont très utiles :
- respect encodage unicode
- gestion des dates
- namesmpacs  
... (de ce que j'en ai lu)
 
dites moi si je me trompe au sujet de PHP6.


Message édité par jokaritaff le 15-05-2008 à 17:10:34
Reply

Marsh Posté le 15-05-2008 à 17:09:54    

d'un autre solution , utiliser un langage dans un cadre professionnel, c'est avant tout l'utiliser dans le bon sens
 
pas en essayant d'en faire autre chose
 
php a de gros manques, mais pas là ou tu le penses [:proy]


---------------

Reply

Marsh Posté le 15-05-2008 à 17:12:23    

ben ce que j'essaie de mettre en oeuve est un gros manque quand meme.
Mais je sais que je vais chercher des choses dans PHP que celui ci ne prévoit pas. C'est la vie.
 
quels manques as tu constaté dans PHP ?

Reply

Marsh Posté le 15-05-2008 à 17:22:54    

je suis encore bloqué en php4 au boulot, donc tu imagine un peu les manques que je ressent :cry:  
 
j'avais trouvé un bel article la semaine dernière, j'essayerai de te le retrouver. Mais globalement, j'aimerai bien avoir des namespace, de la surcharge d'opérateur, et plein d'autres trucs que j'oublie  
 
j'ai encore une dizaine de millier de ligne de code a refactorer( dans le sens réécrire complètement) avant d'espérer avoir nu truc qui fonctionne en php5  
 
 
au passage, est ce que tu as un exemple ou le typage pose problème au niveau des types "primitifs"


---------------

Reply

Marsh Posté le 15-05-2008 à 17:23:51    

moi ce qui me gêne :
- un attribut constant d'une classe est obligatoirement public
- pas d'attribut final possible, seules les méthodes peuvent être finales
- Pas de surcharge du "equals" comme en Java possible
- Pas de support UTF-8 natif, mais ça va venir :)
 
J'en oublie certainement, coté POO c'est sur que ça n'est pas très complet, mais depuis PHP4 un bon en avant a tout de meme été fait.

Reply

Marsh Posté le 15-05-2008 à 17:34:36    

flo850 a écrit :


au passage, est ce que tu as un exemple ou le typage pose problème au niveau des types "primitifs"


 
et bien si je veux calculer 2 valeurs flottantes
je souhaite m'assurer que les 2 variabels en question sont bien des tyeps flottant
et pas des strings.
 
Or PHP n'empeche pas du tout une variable de passer d'une valeur float a une valeur String entre le moment
où elle est assignée et le moment où je calcule.
C'est ca qui me gene.
 
De meme si je caste ma variable, si par ex la variable passe de float a int ou de double à float ,  
je perd soit de l'information sur la décimale (float vers int)
soit  je perd carrément de l'information sur la taille de la valeur (double vers float)
 
Du coup mon calcul est erroné.
 
En dehors ca ca me gene pas.
 
Côté classes et méthode, rien ne m'empeche toutefois de caster les parametres dans les getters ou setters  
ou au lieu de caster faire une verif de type avec is_int, is_float, etc... et provoquer une exception
si la verification est fausse.

Reply

Marsh Posté le 16-05-2008 à 09:26:46    

J'ai pas mal discuté avec un expert .net qui me disait que le compilateur est la pour gueuler si less types sont pas respectés.
Je prend pas sa version pour vérité, mais c'est dans ce sens que je voulais tendre au départ.
 
Au vu de vos réponses je vois que le rôle de "verrou" est mal attribué.
 
qu'est ce que ce principe de promotion : peux tu m'en dire plus ?

Reply

Marsh Posté le 16-05-2008 à 11:18:28    

j'étudie depuis ce matin le Zend Framework, et quelle révélation :  
parmi les très nombreux services qu'il propose
il y a tout ce qui concerne la validation des types.
Donc je peux maintenant me focaliser sur d'autre choses.
 
C nickel j'ai trouvé ma solution !!!

Reply

Marsh Posté le 16-05-2008 à 14:10:47    

et là  ou tu avais choisi une plateforme ouverte ( php ) , tu te bloque chez zend obligatoirement
 
autant faire du C# , ca sera aussi proche


---------------

Reply

Marsh Posté le 16-05-2008 à 14:32:25    

le choix du langage ne m'appartient pas. Je ne pourrai pas revenir sur ce choix qui a été adopté bien avant que je bosse dans ma boite.
 
Ceci dit quelque part ca m'arrange aussi paske PHP5 c ce que je connais le mieux.
Ceci je pense que je me serais bien adapté a C# meme si je suis  débutant sur ASP.net
 
"tu te bloque chez Zend'' :  
ben en fait ZF m'apporte a peu près tout ce que je cherche a faire en objet, sans pour autant devoir partir dans des directions que PHP5 ne prévoit pas pour le moment
 
Et puis bon Zend c'est quand meme la boite qui développe le PHP5 core, donc a priori leur framework se hisse naturellement parmi les meilleurs.
Toutefois je dis pas que ZF est LE meilleur framework PHP, j'en sais rien.

Reply

Marsh Posté le 19-05-2008 à 10:26:40    

merci bcp pour ce lien
Sinon vous connaissez PRADO ?

Reply

Marsh Posté le 19-05-2008 à 16:56:04    

oui ;)
 
Infos sur prado ici : http://www.xisc.com/

Reply

Marsh Posté le 19-05-2008 à 17:14:34    

a vrai dire le sens de ma question etait plutôt :  
quelle est votre impression sur Prado, feedback sur des projets, etc...
 
merci pour le lien mais bon je peux le trouver moi meme, pas besoin que vous me machiez ce travail la hehe :-)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed