2013-08-14 1 views
5

Remarqué quelque chose au sujet des cours de PHP et je ne sais pas si c'est un bug ou pourquoi cela fonctionne, voici le code:propriété de classe PHP privé et la méthode

<?php 
class A { 
    private $prop = 'value'; 

    public function fun() 
    { 
     $obj = new A; 
     $obj->echoProp(); 
    } 

    private function echoProp() 
    { 
     echo 'Prop has value: '.$this->prop; 
    } 
} 

$obj = new A; 
$obj->fun(); 

Et le résultat est une erreur Je m'attendais depuis que j'appelle une méthode privée (testé sur PHP 5.3.10-1ubuntu3.7 avec Suhosin-Patch). Le résultat est « Prop a une valeur: la valeur »

+0

Comment voulez-vous attendre à des méthodes privées à appeler au lieu si pas de méthodes publiques? – str

+0

Pour être précis, vous n'êtes pas appeler une méthode privée, vous appelez une méthode publique qui appelle la méthode privée. La méthode publique a accès à la méthode privée, mais appelant '$ obj-> echoProp();' échouera parce que dans ce cas, vous appelez la méthode privée. Si votre attente était vrai, rien ne serait en mesure d'appeler une méthode privée. – djheru

Répondre

2

la documentation php http://www.php.net/manual/en/language.oop5.visibility.php#language.oop5.visibility-other-objects il dit:

Visibilité d'autres objets

objets du même type auront accès les uns aux autres privés et membres protégés, même si elles ne sont pas les mêmes instances . Ceci est car les détails spécifiques à l'implémentation sont déjà connus lorsque à l'intérieur de ces objets.

Donc, ce n'est pas un bug mais une fonctionnalité recherchée de php.

2

Tant que vous êtes dans la classe, vous pouvez appeler votre classe des méthodes privées sur toute instance.

Questions connexes