xorax Posté 29 Mai 2006 Posté 29 Mai 2006 bonjour, j'ai un petit problème, j'utilise PHP 5.1.2 en local mais il y a PHP 5.0.4 sur mon serveur distant et apparement il n'a pas l'air de correctement prendre en compte la function __get dans une class... <?phpclass test { private $x = 'abscisse'; private $y = 'ordonnee'; function __get($v){ return $this->$v; }}$occ = new test();echo $occ->x;?> ceci va me généré un erreur fatale de type "Cannot access private property" sur mon serveur distant alors que en local tout passe correctement. j'ai éssayer de mettre la fonction en public ou private mais rien à faire. je me demandais si c'est normal ou bien si j'ai oublié de faire quelque chose ??
Anonymus Posté 29 Mai 2006 Posté 29 Mai 2006 Pour les variables comme pour les fonctions, il est préférable d'éviter d'utiliser le underscore en premier caractère. En effet, ce caractère est utilisé dans le code du moteur php, et induit des erreurs/bugs. De plus, "get" est plus ou moins un 'mot clé. A mon avis, tu aurais intéret à faire des essais avec un autre mot, 'foo' par exemple Pour ton script : Il est possible que la variable que tu essaies d'atteindre ne soit pas accessible. Celle ci est déclarée en 'private', ce qui la rendrait a priori inaccessible (si php5 est bien 'objet'...) Si ca marche en local et non sur le serveur, c'ets probablement parce que ton serveur local est plus permissif quant-aux erreurs Voilà, beaucoup d'incertitudes, mais l'erreur est probablement là
xorax Posté 29 Mai 2006 Auteur Posté 29 Mai 2006 nexen : Surcharge de membre pas d'erreur du coté de mon serveur.
Dan Posté 29 Mai 2006 Posté 29 Mai 2006 Pour les variables comme pour les fonctions, il est préférable d'éviter d'utiliser le underscore en premier caractère. En effet, ce caractère est utilisé dans le code du moteur php, et induit des erreurs/bugs. De plus, "get" est plus ou moins un 'mot clé. A mon avis, tu aurais intéret à faire des essais avec un autre mot, 'foo' par exemple Sauf en php5 qui permet les surcharges Les appels de méthodes et l'accès aux membres peuvent être surchargés via les méthodes __call(), __get() et __set(). Ces méthodes ne seront déclenchées que si votre objet, hérité ou non, ne contient pas le membre ou la méthode auquel vous tentez d'accéder. Toutes les méthodes surchargées doivent être définies en tant que public. Depuis PHP 5.1.0, il est également possible de surcharger les fonctions isset() et unset() via, respectivement, les méthodes __isset et __unset. Surcharge de membre void __set ( string name, mixed value ) mixed __get ( string name ) bool __isset ( string name ) void __unset ( string name ) Les membres d'une classe peuvent être surchargés afin d'exécuter un code spécial contenu dans vos méthodes __set() et __get(). Le paramètre $name est le nom de la variable qui doit être définie ou recherchée. Le paramètre $valeur de la méthode __set() spécifie la nouvelle valeur à donner à la variable $name. Voir la page: http://no2.php.net/manual/fr/language.oop5.overloading.php Je retiens de la dernière citation qu'il y a eu des changements depuis la version 5.1.0 ... mais pas ceux que tu as remarqués.
xorax Posté 29 Mai 2006 Auteur Posté 29 Mai 2006 merci Dan... donc problème sur 90plan OVH apparement... d'ailleur je viens de relire la doc et ça me semble confus quand même : ... Toutes les méthodes surchargées doivent être définies en tant que public. ... et dans l'exemple : <?phpclass Setter { public $n; private $x = array("a" => 1, "b" => 2, "c" => 3); private function __get($nm) { echo "Récupération de [$nm]\n"; if (isset($this->x[$nm])) { $r = $this->x[$nm]; echo "Retour : $r\n"; return $r; } else { echo "Rien!\n"; } }...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant