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

  FORUM HardWare.fr
  Programmation
  PHP

  Pourquoi ça marche ?!!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pourquoi ça marche ?!!!

n°1145321
FredEvans
Posté le 10-07-2005 à 03:46:30  profilanswer
 

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
mood
Publicité
Posté le 10-07-2005 à 03:46:30  profilanswer
 

n°1145331
pascal_
Posté le 10-07-2005 à 09:55:44  profilanswer
 

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

n°1145332
Berceker U​nited
PSN : berceker_united
Posté le 10-07-2005 à 10:07:39  profilanswer
 

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.

n°1145338
pascal_
Posté le 10-07-2005 à 10:38:46  profilanswer
 

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]  

n°1145341
elianor
bannie 17 fois
Posté le 10-07-2005 à 10:46:28  profilanswer
 

PHP roulaize \o/


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
n°1145345
masklinn
í dag viðrar vel til loftárása
Posté le 10-07-2005 à 10:58:05  profilanswer
 

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
n°1145352
pascal_
Posté le 10-07-2005 à 11:11:18  profilanswer
 

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]

n°1145362
masklinn
í dag viðrar vel til loftárása
Posté le 10-07-2005 à 11:27:38  profilanswer
 

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
n°1145404
Berceker U​nited
PSN : berceker_united
Posté le 10-07-2005 à 12:01:32  profilanswer
 

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. }


n°1145407
elianor
bannie 17 fois
Posté le 10-07-2005 à 12:03:29  profilanswer
 

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 §§§§§§§§
mood
Publicité
Posté le 10-07-2005 à 12:03:29  profilanswer
 

n°1145432
FredEvans
Posté le 10-07-2005 à 12:27:41  profilanswer
 

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.

n°1145434
elianor
bannie 17 fois
Posté le 10-07-2005 à 12:29:45  profilanswer
 

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 §§§§§§§§
n°1145437
masklinn
í dag viðrar vel til loftárása
Posté le 10-07-2005 à 12:32:12  profilanswer
 

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

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

  Pourquoi ça marche ?!!!

 

Sujets relatifs
mon filtre automatique ne marche pas avec les datesPb code js, top.location marche pas....
shell_exec et iptables..ca marche pasGalerie PHP qui ne marche pas sous Firefox
pk sa marche !count qui marche pas
javascript marche pas sur mozillavo mieux voir le dernier msg de ce topic pour comprendre le 1er ??
Formulaire qui ne marche pas à cause d'un session_start()... 
Plus de sujets relatifs à : Pourquoi ça marche ?!!!


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