Pourquoi ça marche ?!!!

Pourquoi ça marche ?!!! - PHP - Programmation

Marsh Posté le 10-07-2005 à 03:46:30    

Bonjour tout le monde.
 
Je bricolais un ptit objet PHP5 tranquilou histoire de faire quelques essai avec les ArrayObject et en faisant une petite faute de frappe, je suis tombé sur un phénomène que je trouve pour le moins étrange pour de la POO.
 
Un ptit peu de code illustrera bien mon étonement :
 

Code :
  1. class maclass
  2. {
  3. // du code quelquonque
  4. }
  5. $tmp = new maclass();
  6. $tmp->bidon = 12; // pas d'erreur alors que bidon n'existe pas ????!!!!!
  7. echo $tmp->bidon; /* affiche bien 12 ... mais bon, vu la  
  8.     ligne précédente, à la rigueure c'est normal :p?! */


 
Alors en fait, ce qui est super étrange c'est que l'on puisse assigner autant de propriété que l'on veut même si elles n'existent pas dans la class.
Quelqu'un pourrait il m'expliquer pourquoi ce code marche ? Nan parce que ça m'ennui en fait. Et pis si c'est un bug PHP5 il serait temps de le signaler car ça traine encore sur la version 5.1.0b2.


Message édité par FredEvans le 10-07-2005 à 03:49:06
Reply

Marsh Posté le 10-07-2005 à 03:46:30   

Reply

Marsh Posté le 10-07-2005 à 09:55:44    

C'est pas un bug, ça marche parceque c'est du php  [:taiche]  
 
Il n'y a aucun contrôle  [:dawa]  

Reply

Marsh Posté le 10-07-2005 à 10:07:39    

attend Pascal j'arrive avec mon groupe !
[:napalmito] [:necris]
 
Effectivement je trouve que c'est un gros défaut mais c'est que toi aussi tu as cherché. un attribut ne doit pas être utilisé depuis l'exterieur d'une classe il faut passer par une methode. Une règle consiste a mettre tous les attributs en private et faire des methodes accesseurs mais bon c'est en php4 que c'étais freestyle  [:x-oni]  php5 je pense que ceci ne passe plus.

Reply

Marsh Posté le 10-07-2005 à 10:38:46    

Berceker United a écrit :

...mais bon c'est en php4 que c'étais freestyle  [:x-oni]  php5 je pense que ceci ne passe plus.


 
Il est déjà en php5.1.0b2   [:kahn21]  
 
Et tu crois qu'ils auraient cassé la retro-compatibilité pour ça [:trompette5]  

Reply

Marsh Posté le 10-07-2005 à 10:46:28    

PHP roulaize \o/


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 10-07-2005 à 10:58:05    

On peut aussi faire ça en Javascript :o
 
 [:neowen]
 
Accessoirement, le Python aussi permet de faire ça, et je vois pas le problème, les accesseurs c'est pour le Java :o


Message édité par masklinn le 10-07-2005 à 10:59:29

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 10-07-2005 à 11:11:18    

masklinn a écrit :

On peut aussi faire ça en Javascript :o
 
 [:neowen]
 
Accessoirement, le Python aussi permet de faire ça, et je vois pas le problème, les accesseurs c'est pour le Java :o


 
Tu fais jamais de faute de frappe  [:croquignol] ?
 
Si tu écris $monObj->fauteFrappe=0 , php dit rien du tout  [:franck75]

Reply

Marsh Posté le 10-07-2005 à 11:27:38    

pascal_ a écrit :

Tu fais jamais de faute de frappe  [:croquignol] ?
 
Si tu écris $monObj->fauteFrappe=0 , php dit rien du tout  [:franck75]


Ca t'apprend à faire gaffe à tes conneries [:dawa]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 10-07-2005 à 12:01:32    

masklinn a écrit :

On peut aussi faire ça en Javascript :o
 
 [:neowen]
 
Accessoirement, le Python aussi permet de faire ça, et je vois pas le problème, les accesseurs c'est pour le Java :o


Je sais pas ou tu as été cherché ça mais c'est une règle UML. Cela facilite la maintenance et en partie la sécurité des scriptes. Je vais prendre un simple sur lequelle je suis tombé et ceci ma sauvé.
Sur un site marchand les prix etais en francs lorsque nous sommes passés en Euro le client avait completement oublié de nous faire part de ce changement. Il fallait convertir les prix en euros. Probleme c'est que nous pouvions pas faire un update sur toutes les tables ayant un prix. Comment afficher les prix en euros alors qu'il n'est pas possible de changer les données. Ben heureusement que nous passions pas par ton raisonnement. il a juste fallut faire ceci dans la classe.

Code :
  1. Function getPrice(){
  2.   return $this->Price/6.559;
  3. }


Reply

Marsh Posté le 10-07-2005 à 12:03:29    

Berceker United a écrit :

Je sais pas ou tu as été cherché ça mais c'est une règle UML.


 
non plus :o
 
C'est une implémentation d'un paradigme de programmation appelé l'accès uniforme. A savoir que chaque accès à un objet doit se faire de manière controlée par une voie unique afin de permettre un maintien de l'encapsulation :o


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 10-07-2005 à 12:03:29   

Reply

Marsh Posté le 10-07-2005 à 12:27:41    

Bha mince alors ! Et moi qui espérais que ce soit un bug qui puisse être corrigé ...
Perso je trouve ça anti-objet de pouvoir créer des propriété "à la volée" et surtout ça me pose un groooooos problème !!!
 
En fait je suis en train de me faire une sorte de petit "framework" à ma sauce pour faciliter le développement de site internet polyvalents. Grossomodo, ce "framework" gère un certain nombre de choses tout seul et permet de créer des éléments HTML complexes en quelques lignes de code PHP. Par éléments HTML complexes j'entend des treeview dynamique, des calendriés, des tableaux, etc... en fait j'essais surtout d'occulter au maximum le HTML (et le javascript) afin d'une part de maximizer la compatibilité entre les navigateurs et d'autre part de pouvoir me concentrer sur le code plutot que sur la mise en forme.
 
Bref, c'est un petit projet perso qui pour l'instant m'a permis de gagner beaucoup de temps et de mieux structurer mon développement, mais le probleme que je viens de souligner sur les propritétés qui se crées toutes seules m'ennui dans le sens où mon framework n'est plus un framework puisque qu'il n'est plus capable d'assurer la cohérence du code comme le ferait n'importe quel autre language orienté objet digne de ce nom.
 
De plus j'ai constaté que les fonction magique __get et __set ne fonctionnent pas du tout avec ces propriétés ainsi crées, c'est ce qui me fait dire que c'est pas bien normal mais bon ... mis à part ça, PHP5 c'est pas mal du tout.
 
En tous cas, si quelqu'un connait un moyen d'empêcher la création automatique de ces propriétés, je suis preneur.

Reply

Marsh Posté le 10-07-2005 à 12:29:45    

FredEvans a écrit :


Perso je trouve ça anti-objet de pouvoir créer des propriété "à la volée" et surtout ça me pose un groooooos problème !!!


 
Ca pose surtout des problème dans le cadre de typage fort :o
 
Soit un objet A et un objet B instance de la même classe
Tu rajoute une propriété sur B  
A et B sont ils toujours instances de la même classe ?
 
On peut parfaitement avoir des langages objets avec ce type de propriétés. Mais effectivement, je suis pas fan :o


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 10-07-2005 à 12:32:12    

elianor a écrit :

Ca pose surtout des problème dans le cadre de typage fort :o
 
Soit un objet A et un objet B instance de la même classe
Tu rajoute une propriété sur B  
A et B sont ils toujours instances de la même classe ?


En python, oui


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

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