php – 将派生字段添加到Doctrine_Record子类的最佳方法是什么?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 将派生字段添加到Doctrine_Record子类的最佳方法是什么?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
想象一下,我有一个名为“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的子类,然后你的模型会扩展,其中包含一个覆盖它的单个覆盖功能.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 将派生字段添加到Doctrine_Record子类的最佳方法是什么?全部内容,希望文章能够帮你解决php – 将派生字段添加到Doctrine_Record子类的最佳方法是什么?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。