Doctrine 1.2: переопределение Doctrine_Record :: __ get () из шаблона - PullRequest
2 голосов
/ 16 сентября 2010

У меня есть класс модели (очевидно, он расширяет Doctrine_Record), который «действует как» пользовательский шаблон.

Я хочу получить такие значения: "echo $ record-> virtual_field". Есть ли способ переопределить метод get в моем настраиваемом шаблоне для предоставления настраиваемого ответа, а затем передать запрос родительскому классу или нет?

Другими словами, есть ли способ переопределить Doctrine_Record :: __ get () из связанного шаблона?

Ответы [ 2 ]

1 голос
/ 21 сентября 2010

Хорошо.Я предполагаю, что вы не говорите о фактических шаблонах поведения 'actAs'.

Если вы определите новый метод __get (), он автоматически переопределит родительский метод __get ().

Теперь вВаш новый метод __get (), вы сначала проверяете, существует ли он в вашем текущем экземпляре, а затем родительский.

Я взломал это вместе (имейте в виду, что уже почти полночь):

<?php
class bar {
public $data = array();
  public function __construct() {
    $this->data['virtual_field'] = "set in bar";
  }

  public function  __get($name) {
    if(array_key_exists($name, $this->data)) {
      return $this->data[$name];
    }
    return null;
  }

  public function __set($name, $value) {
    $this->data[$name] = $value;
  }
}

class foo extends bar {
public $data = array();
  public function __construct() {

  }

  public function  __get($name) {
    if(array_key_exists($name, $this->data)) {
      return $this->data[$name];
    }
    if (parent::__get($name))
      return parent::__get($name);

    return null;
  }

  public function __set($name, $value) {
    $this->data[$name] = $value;
  }
}

$a = new foo;
echo $a->virtual_field;

Теперь я не знаю, насколько хорошо это работает для того, чего вы пытаетесь достичь.

0 голосов
/ 16 октября 2013
class Product extends Doctrine_Record {

    //...

    public function __get($name) {
        if ($name == 'virtual_field') {
            return $this->virtual_field();
        }                                                     
        else {
            return parent::__get($name);
        }
    }


    public function virtual_field() {
        // calculate or retrieve virtual field value
        return $value;
    }
}
...