加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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的子类,然后你的模型会扩展,其中包含一个覆盖它的单个覆盖功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读