2013-08-14 6 views
5

Заметили что-то о классах PHP, и я не знаю, если это ошибка или почему это работает, это код:PHP класс частной собственности и метод

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

И результат не является ошибкой, как Я ожидал, так как я вызываю частный метод (проверен на PHP 5.3.10-1ubuntu3.7 с Suhosin-Patch). В результате «Prop имеет значение: значение»

+0

Как бы вы ожидали, что частные методы будут называться вместо этого, если не из общедоступных методов? – str

+0

Чтобы быть конкретным, вы не вызываете частный метод, вы вызываете открытый метод, который вызывает частный метод. Открытый метод имеет доступ к частному методу, но вызов '$ obj-> echoProp();' будет терпеть неудачу, потому что в этом случае вы вызываете частный метод. Если ваше ожидание было правдой, ничто не могло бы вызвать частный метод. – djheru

ответ

2

В PHP документации http://www.php.net/manual/en/language.oop5.visibility.php#language.oop5.visibility-other-objects он говорит:

Видимости от других объектов

объектов одного и того же типа будет иметь доступ к другу другу частного и защищенных членам, даже если они не являются одними и теми же случаями , Это , потому что конкретные детали реализации уже известны, когда внутри этих объектов.

Так что это не ошибка, а искомая функция php.

2

Пока вы находитесь в классе, вы можете вызвать частные методы своего класса в любом экземпляре.

 Смежные вопросы

  • Нет связанных вопросов^_^