2013-08-14 19 views
5

notato qualcosa sulle classi di PHP e non so se si tratta di un bug o perché funziona, questo è il codice:classe PHP proprietà privata e il metodo

<?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(); 

E il risultato non è un errore come Mi aspettavo dal momento che sto chiamando un metodo privato (testato su PHP 5.3.10-1ubuntu3.7 con Suhosin-Patch). Il risultato è "Prop ha valore: valore"

+0

Come ti aspetteresti che vengano chiamati i metodi privati ​​se non dai metodi pubblici? – str

+0

Per essere precisi, NON stai chiamando un metodo privato, stai chiamando un metodo pubblico che chiama il metodo privato. Il metodo pubblico ha accesso al metodo privato, ma chiamando '$ obj-> echoProp();' fallirà perché in quel caso stai chiamando il metodo privato. Se la tua aspettativa era vera, nulla sarebbe in grado di chiamare un metodo privato. – djheru

risposta

2

Alla documentazione di PHP http://www.php.net/manual/en/language.oop5.visibility.php#language.oop5.visibility-other-objects si dice:

Visibilità da altri oggetti

oggetti dello stesso tipo avrà accesso ad ogni altri privati ​​e membri protetti anche se non sono le stesse istanze . Questo è perché i dettagli specifici dell'implementazione sono già noti quando all'interno di tali oggetti.

Quindi questo non è un bug ma una funzionalità desiderata di php.

2

Finché sei in classe, puoi chiamare i metodi privati ​​della classe in qualsiasi istanza.