2013-08-14 21 views
5

zauważył coś na temat klas PHP, a ja nie wiem, czy jest to błąd i dlaczego to działa, jest to kod:klasa PHP własność prywatna i sposób

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

A wynik nie jest błąd jako Spodziewałem się, ponieważ nazywam metodę prywatną (testowaną na PHP 5.3.10-1ubuntu3.7 z łatką Suhosin). Rezultatem jest "Prop ma wartość: wartość"

+0

Jak można się spodziewać prywatnych metod, które można nazwać, jeśli nie z publicznych metod? – str

+0

Mówiąc konkretnie, NIE dzwonisz do metody prywatnej, nazywasz publiczną metodę, która wywołuje metodę prywatną. Metoda publiczna ma dostęp do metody prywatnej, ale wywołanie '$ obj-> echoProp();' nie powiedzie się, ponieważ w tym przypadku wywołujesz metodę prywatną. Jeśli twoje oczekiwania były prawdziwe, nic nie byłoby w stanie wywołać metody prywatnej. – djheru

Odpowiedz

2

W dokumentacji php http://www.php.net/manual/en/language.oop5.visibility.php#language.oop5.visibility-other-objects mówi:

Widoczność z innymi obiektami

obiekty tego samego typu będą miały dostęp do każdej innych prywatnych i chronionych członków, chociaż nie są one takie same przypadki . Jest to , ponieważ szczegóły dotyczące implementacji są już znane, gdy wewnątrz tych obiektów znajduje się .

To nie jest błąd, ale pożądana funkcja php.

2

Tak długo, jak jesteś w klasie, możesz wywoływać prywatne metody klasy na każdym wystąpieniu.