Php 受保护变量范围
这里Php 受保护变量范围,php,oop,Php,Oop,这里echo$automobile->engine导致我致命错误。这是正确的。 NoI我创建了一个公共函数eng(),在它为我工作的类之外使用受保护的变量引擎 我的问题是,通过使用公共函数,我可以访问受保护的变量,这样我就可以在任何地方访问它,所以基本上我将受保护的变量转换为公共变量这是一个粗体的语句,对吗??否。您可以读取它的值,但不能更改它。您将无法使用类似于$automobile->eng()=“2000CC”的方法来更改引擎字符串,因为函数返回的是值,而不是变量。通过公共方法公开受保护变
echo$automobile->engine代码>导致我致命错误。这是正确的。
NoI我创建了一个公共函数eng()
,在它为我工作的类之外使用受保护的变量引擎
我的问题是,通过使用公共函数,我可以访问受保护的变量,这样我就可以在任何地方访问它,所以基本上我将受保护的变量转换为公共变量这是一个粗体的语句,对吗??否。您可以读取它的值,但不能更改它。您将无法使用类似于$automobile->eng()=“2000CC”
的方法来更改引擎字符串,因为函数返回的是值,而不是变量。通过公共方法公开受保护变量的标量/简单值没有害处。这一点的全部目的是更好地控制对象的内部状态如何被管理并呈现给“外部世界”
当您希望确保受保护的变量属于某种类型时,这一点特别有用。技术上不是。属性仍然受到保护,但可以通过getter方法获取其值
在这里,您创建了一个getter方法,它允许您获取类的属性值
如前所述,使用getter和setter是一种很好的实践
希望它有帮助。您不能更改它的值。您正在间接访问该var.No的值。除非您还编写了setter函数,否则您仍然无法为该变量赋值,因此存在差异。您没有转换该变量。您只需提供一个方法来获取类外部受保护变量的值。变量仍受保护。您没有转换任何变量,您只是在访问。正如@deceze提到的,有一点不同。您没有转换该变量,只是创建了一个方法,返回受保护变量值的副本。
class Automobile
{
public $fuel;
protected $engine="1500CC";
public function eng(){
return($this->engine);
}
}
$automobile = new Automobile;
echo $automobile->fuel = 'Petrol';
echo $automobile->engine;
echo $automobile->eng();