gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 23:30:53 24 4
gpt4 key购买 nike

关于良好实践的主题,对需要 getter 和 setter 的类使用 __call() 是否正确?

参见 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 {}

如果您的方法可以静态创建,您应该这样做。

您的 Gist 正在谈论 getter 和 setter,它们是通过 __call 自动创建的,没有额外的逻辑。 getter 和 setter 的好处是,您可以在设置或获取值之前处理它。在这种情况下,你不能。所以我会考虑这个糟糕的设计。如果您将这些字段公开而不是保护,它会产生相同的结果。


旁注:IDE 类似于 PHP Storm可以自动为你创建 Setter 和 Getter,如果你写 protected $_foo;(在这种情况下,只需在字段上按 ALT+ENTER

结果:

protected $_foo;

/**
* @return mixed
*/
public function getFoo()
{
return $this->_foo;
}

/**
* @param mixed $foo
*/
public function setFoo($foo)
{
$this->_foo = $foo;
}

如果您通过 PHP 文档或通过直接赋值(protected $foo = true)定义类型,生成的 PHP Doc 甚至会写入 @param bool $foo@return bool 而不是 mixed

关于php - 使用 __call() 而不是 getter 和 setter 是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25313686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com