关于良好实践的主题,将__call()用于需要getter和setter属于其属性的类是否正确?
查看Doctrine Entity的示例:
https://gist.github.com/devmatheus/10668172#file-sessao1-php
我知道性能会受到影响,但这会缩短编程时间,你怎么看?
最佳答案 如你所说,性能会降低,但更好的设计总能胜过性能.具有更多Ram和CPU的服务器并不像开发人员那么昂贵.
如果您需要动态调用的方法,我认为这是一个好点. ,但是,它应该通过PHP Doc进行详细记录(它有助于IDE完成代码完成,开发人员不需要1小时才能理解).如果您无法使用此PHP文档进行文档记录(方法名是什么?返回类型是什么?),情况就是如此.
/*
* @method myReturnType $myMethodName
* @property myReturnType $myPropertyName
*/
class Foo {}
如果可以静态创建Method,则应该执行此操作.
你的要点是谈论通过__call自动创建的getter和setter,没有额外的逻辑. getter和setter的好处是,你可以在设置或获取之前使用该值.在这种情况下,你不能.所以我会考虑这个糟糕的设计.如果您将字段设为公开而不是受保护,则会产生相同的结果.
侧注:IDE如PHP Storm可以自动为您创建Setter和Getter,如果你的wrting受保护$_foo; (在这种情况下,简单按ALT ENTER键在该字段上.
结果:
protected $_foo;
/**
* @return mixed
*/
public function getFoo()
{
return $this->_foo;
}
/**
* @param mixed $foo
*/
public function setFoo($foo)
{
$this->_foo = $foo;
}
如果您通过PHP文档或通过直接赋值(受保护的$foo = true)定义类型,生成的PHP Doc甚至会写@param bool $foo和@return bool而不是混合.