Почему свойства, которые имеют закрытые модификаторы доступа, доступны через метод?

Рейтинг: 0Ответов: 1Опубликовано: 18.03.2015

Всем привет.

Возник вопрос: почему свойства, которые имеют закрытые модификаторы доступа, доступны (прошу прощения за тавтологию) через метод printHello?

Заранее спасибо.

class MyClass
{
public $public = 'Общий';
protected $protected = 'Защищенный';
private $private = 'Закрытый';

function printHello()
{
    echo $this->public;
    echo $this->protected;
    echo $this->private;
}
}

$obj = new MyClass();
echo $obj->public; // Работает
echo $obj->protected; // Неисправимая ошибка
echo $obj->private; // Неисправимая ошибка
$obj->printHello(); // Выводит Общий, Защищенный и Закрытый

Ответы

▲ 3Принят

Читай меня полностью!

public - публичное свойство, доступно всем, в т.ч. извне.
protected - свойство запрещающее доступ к методу/объекту извне, но разрешает наследовать его.
private - доступ только у элементов класса, ни извне, ни потомки до него не могут добраться.
Принципы инкапсулирования :)

В данном случае метод printHello() находится частью класса, поэтому он имеет доступ до всех типов свойств.
Будь он реализован в потомке - вывел бы public и protected, но заглохнет на private.