php – 使用__call()而不是getter和setter是否正确?

关于良好实践的主题,将__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而不是混合.

点赞