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