所以我有一个包含属性和方法的简单类。我不明白为什么班上的私有财产可以在那个班级之外输出。谁能对此有所了解?我读到私人财产无法在同类之外访问。
为什么我在下一个代码上没有收到错误?
class simpleClass{
private $property = 'TEST';
public function show_property(){
echo $this->property;
}
}
$my_object = new simpleClass();
$my_object->show_property();
答案 0 :(得分:2)
属性可能是私有的,但您还创建了一个 public 函数,该函数可以访问该属性。这个函数show_property()
是类本身的一部分,实际上可以访问类的私有部分。
你所做的评论显示出对这种情况的轻微误解:
我不明白为什么我班级的私有财产可以在该班级之外输出。
你是对的,它不能在课外访问。它只能在 类中访问。但是,通过调用show_property()
,您实际上已将移动到该类中(暂时)。
答案 1 :(得分:2)
因为你根本没有从课外访问该属性。
您正在调用show_property()
方法,该方法是公开的,因此您可以调用它。 show_property()
反过来访问私有财产,但也没关系,因为不是来自课外的访问。
拥有私有财产和公共访问者/获取方法正是如此 - 您可以控制如何以及是否可以访问您的私人财产。
答案 2 :(得分:0)
不在外面访问。外表示$ myobject->属性。
答案 3 :(得分:0)
将功能设为私有。
class simpleClass{
private $property = 'TEST';
private function show_property(){
echo $this->property;
}
}
$my_object = new simpleClass();
$my_object->show_property();
答案 4 :(得分:0)
您的代码正在按照您的要求进行操作。你不访问私有对象$ property。而是访问驻留在类simpleClass中的公共函数show_property()。所以对象$ property仍然是私有的。因为函数和对象都在同一个类中,所以函数可以访问对象。
如果你试图从$ my_object中回显对象,你将无法这样做,因为该对象是私有的。