2015-10-27 3 views
0

Итак, у меня есть простой класс, который содержит свойство и метод. Я не понимаю, почему частная собственность моего класса может выводиться вне этого класса. Может ли кто-нибудь осветить это? Я читал, что доступ к частной собственности не может быть за пределами своего класса.Почему к частной собственности можно получить доступ за пределами класса?

Почему у меня нет ошибки в следующий код?

class simpleClass{ 
    private $property = 'TEST'; 
     public function show_property(){ 
      echo $this->property; 
     } 
} 

$my_object = new simpleClass(); 
$my_object->show_property(); 
+0

Как я знаю, у вас есть доступ к частной переменной в публичной функции, поэтому она доступна. – sandeepsure

+0

Я думал, что если свойство является приватным, хотя этот метод является общедоступным, он может быть доступен только в этом классе методом. – Ionut

ответ

2

свойство может быть закрытым, но вы также создали общественную функцию, которая имеет доступ к собственности. Эта функция show_property(), являясь частью самого класса, на самом деле имеет доступ к частным частям класса.

Комментарий вы сделали показывает небольшое недопонимание ситуации:

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

Вы правы, к нему нельзя получить доступ за пределами класса. Доступ к нему можно получить только в в классе. Однако, позвонив по номеру show_property(), у вас на самом деле переехал в класс (временно).

+0

Я думал, что если свойство является приватным, хотя метод является общедоступным, он может быть доступен только в этом классе методом. – Ionut

+0

@Ionut: да, но то, что вы, кажется, не понимаете, это то, что он * * доступен только в этом классе. – paxdiablo

+0

Хорошо. Поэтому я понимаю, что публичный метод обеспечивает гибкость свойства, независимо от того, как он определяется (открытый, закрытый, статический и т. Д.). Я прав? – Ionut

0

На него нет доступа. Внешнее означает свойство $ myobject->.

2

Поскольку вы не имеете доступа к собственности извне класса вообще.

Вы вызываете метод show_property(), который является общедоступным, поэтому вы можете называть его. show_property(), в свою очередь, обращается к частной собственности, но это также нормально, так как это не доступ извне класса.

Точка зрения на использование частной собственности и общедоступного метода accessor/getter заключается в том, что у вас есть контроль над тем, как можно получить доступ к вашей частной собственности.

+0

Я думал, что если свойство является приватным, хотя метод является общедоступным, он может быть доступен только в этом классе с помощью метода. – Ionut

+0

Незначительная ничто, хотя я тоже совершил ту же ошибку. Технически это не действительно геттер, так как он фактически не получает * частный элемент (или его копию), чтобы дать вызывающему. Это больше «принтер» :-) – paxdiablo

+0

@paxdiablo Ха, ты прав, пропустил это. Я оставлю его там, хотя это относится к частной собственности и публичным геттерам в целом. –

0

Сделать функцию закрытой.

class simpleClass{ 
    private $property = 'TEST'; 
     private function show_property(){ 
      echo $this->property; 
     } 
} 

$my_object = new simpleClass(); 
$my_object->show_property(); 
+0

Я думал, что если свойство является приватным, хотя метод является общедоступным, он может быть доступен только в этом классе с помощью метода. – Ionut

0

Ваш код выполняет то, что вы просите. Вы не присоединяетесь к частному объекту $ property. Вместо этого вы получаете доступ к публичной функции show_property(), которая находится внутри класса simpleClass. Таким образом, объект $ property остается закрытым. поскольку и функция, и объект находятся в одном классе, функция может получить доступ к объекту.

Если вы попытаетесь выполнить эхо-объект из объекта $ my_object, вы не сможете этого сделать, потому что объект является закрытым.