php – 将派生字段添加到Doctrine_Record子类的最佳方法是什么?
发布时间:2020-12-13 22:29:44 所属栏目:PHP教程 来源:网络整理
导读:想象一下,我有一个名为“item”的表,其中有一个名为“price”的列.除了全价,我想在12个月内得到价格,即 class Item extends Doctrine_Record { ... public function getMonthlyPrice() { return $this-price/12; }} 现在,假设我希望Item的行为就像每月价格只
想象一下,我有一个名为“item”的表,其中有一个名为“price”的列.除了全价,我想在12个月内得到价格,即
class Item extends Doctrine_Record { ... public function getMonthlyPrice() { return $this->price/12; } } 现在,假设我希望Item的行为就像每月价格只是另一列而不是函数调用,例如, $m = Doctrine_Core::getTable("Item")->find(1); echo $m->price; //prints 120 echo $m->monthlyPrice; //prints 10 我的第一直觉是覆盖__get()方法.在Doctrine中有更好或更标准的方法吗? 奖金问题: 是否有一些非常聪明的方法我可以装备物体,所以当我这样做 var_dump($m->getData()) 我知道了 array 'price' => 120 'monthlyPrice' => 10 那会非常漂亮. 解决方法
正如Brian所说,你可以用过滤器做到这一点,但是我认为还有另一种方法可以更接近你正在寻找的东西 – 你需要启用Doctrine的ATTR_AUTO_ACCESSOR_OVERRIDE功能,这意味着它将检查表单中的方法get *和设置*匹配您的属性自动调用它们.这是一个例子:
class Example extends Doctrine_Record { public function getFoo() { return 'foo'; } } Doctrine_Manager::getInstance()->setAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE,true); $example = new Example(); echo $example->foo; 关于你问题的第二部分,不是我见过的 – 你最好的选择是在适当的情况下覆盖模型中的方法,或者创建一个Doctrine_Record的子类,然后你的模型会扩展,其中包含一个覆盖它的单个覆盖功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |