我不喜欢为我的实体类中的每个属性设置“愚蠢”的getter和setter所以我正在考虑使用魔术方法获取/设置这些属性,而不是创建每个getter和setter。这个想法是当它的逻辑与典型的“return $ name”或“$ this-> name = $ name”不同时创建一个特定的getter或setter。此外,这个神奇的方法将在不同的类上创建,每个实体都会扩展它(我对这一步没有太多考虑)
无论如何,你怎么看待用魔术方法替换吸气剂/孵化器?会不会对表现造成太大的惩罚?我没有考虑到的任何其他问题?
答案 0 :(得分:2)
IDE中的代码完成在这种情况下不起作用。 此外,您将无法对对象和数组进行类型提示,也无法对doc块进行类型提示。 性能会比较慢,但根据您的项目(服务器硬件和使用次数),您可能看不到任何差异
答案 1 :(得分:2)
问题在于,例如symfony2 twig
的默认模板引擎需要这些方法。 Twig将语句{{ object.property }}
转换为$object->getProperty()
,因此您不必使用非常好的点表示法来调用twig中的属性,如下所示:{{ object.__get("property") }}
。
我知道它的实体经理doctrine also uses magic methods。因此,当您为对象创建存储库查询时,您可以使用:
$repository->findOneByProperty($value);
而不是
$repository->findOneBy(array(
'property' => $value
));
我强烈建议您不要使用魔术方法,而是分别对每个属性使用get
和set
方法。这也可以让您更好地控制该属性的状态。
另请务必结帐this Answer。它几乎可以回答你的问题。
答案 2 :(得分:1)
如果您指的是Doctrine Entity
并且您没有反对代码生成,则可以使用doctrine:generate:entities
命令,例如:
$ php app/console doctrine:generate:entities Acme/StoreBundle/Entity/Product
如documentation中所述。
因此,您只需要指定字段。