关于PHP中通过公共方法访问Protected变量的疑问
通过公共方法访问PHP Protected变量是否符合规范?
先看你的测试代码:
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();
你提到的这个情况,完全符合PHP的规范,而且这正是protected访问修饰符设计的核心意图之一!
给你拆解一下:
- Protected成员(不管是变量还是方法)的访问规则就是:类内部、子类里能直接用,但类的外部不能直接调用。你直接写
echo $automobile->engine;触发致命错误,这是PHP在严格执行访问控制规则,完全没问题。 - 你写的公共方法
eng(),其实就是给外部提供了一个受控的访问通道——类自己主动决定要不要把protected变量的内容暴露出去,这是PHP面向对象中「封装」特性的标准实践。
这种做法不仅合规,还非常推荐。举个例子,要是以后你想给engine的值加个格式处理(比如返回"发动机排量:1500CC"),或者加个权限校验(比如只有特定角色能看),只需要修改eng()这一个方法就行,不用去改所有外部调用的地方,这就是封装带来的灵活性和可维护性。
内容的提问来源于stack exchange,提问作者Sushil Kumar
相关产品推荐
相关产品推荐

