Jie*_*eng 16 php getter-setter doctrine-orm
我记得在Doctrine 2模型中读到它,我不应该公开属性/字段.你怎么会暴露这些领域?使用的沙箱get*()和set*()方法.这是最好的主意吗?它非常麻烦.使用魔术方法__get() __set()会使设置字段公开类似吗?
你的推荐是什么?
Tim*_*tle 12
这就是为什么你不能使用公共属性:公共字段如何在Doctrine 2中"破解延迟加载"?
你是对的__get(),__set()可以更容易地访问protected/ private字段.
这是一个简单的例子:
public function __get($name)
{
if(property_exists($this, $name)){
return $this->$name;
}
}
Run Code Online (Sandbox Code Playgroud)
当然,这可以访问所有属性.您可以将其放在所有实体扩展的类中,然后将非可评估字段定义为private.或者您可以使用数组来确定应该可以访问哪些属性:$this->accessable = array('name', 'age')
有很多方法可以保护所有属性,并且仍然有一种相当简单的方法来获取/设置它们.
就个人而言,我不喜欢具有琐碎目的的样板代码 - 这使得代码难以阅读并且令人厌烦.因此,我非常喜欢__get/ __set.也就是说,他们确实有一些缺点:
__get/ __set只在字段不可见时才被调用; 如果您访问实体类的代码中的属性,则不会调用它们,并且代理也无法加载自身.(Doctrine试图通过在调用其中一个公共方法时立即加载代理来避免这种情况,但是有一些例外情况,例如__construct或__wake哪些情况没有意义,所以你可能会遇到麻烦,例如阅读构造函数).empty($entity->field)不会调用__get(因此如果使用它会破坏代理行为)如果某些信息应公开,请为其定义一个getter.如果它是可修改的,添加一个setter(更好的是,添加一个流畅的setter!).
API以这种方式更清洁,没有任何魔力.我的代码中不喜欢魔法.
只是我的两分钱:)
通过"流畅的setter"我的意思是实现流畅的界面模式.
| 归档时间: |
|
| 查看次数: |
12899 次 |
| 最近记录: |