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();
这里echo $automobile->engine;
导致致命错误。那是正确的。
NoI我创建了一个public function eng()
来使用受保护的变量引擎,它在我的工作类之外。
我的问题是使用公共函数我可以访问受保护的变量,然后我可以在任何地方访问所以基本上我将保护变量转换为公共变量这是一个粗体的声明是对的?
答案 0 :(得分:2)
技术上没有。您的属性仍受保护,但您可以通过getter方法获取其值。
在这里,您创建了一个getter方法,该方法允许您获取类的属性值。
使用getter和setter是一种很好的做法,如here和here所述。
希望它有所帮助。
答案 1 :(得分:0)
没有。您可以阅读其值,但不能更改它。您无法使用$automobile->eng() = "2000CC"
之类的内容更改引擎字符串,因为该函数返回值而不是变量。
答案 2 :(得分:0)
通过公共方法暴露受保护变量的标量/简单值没有任何害处。这一点的重点是更好地控制对象的内部状态如何被管理并呈现给外部世界"。
当您想确保受保护变量属于某种类型时,此功能特别有用。