2

次のような非常に単純なモデルがあるとします。

class Model_Person extends ORM
{
 /*
     CREATE TABLE `persons` (
   `id` INT PRIMARY KEY AUTO_INCREMENT,
   `firstname` VARCHAR(45) NOT NULL,
   `lastname` VARCHAR(45) NOT NULL,
   `date_of_birth` DATE NOT NULL,
  );
 */
}

フルネームで一種のふりをしたプロパティを追加する方法はありますか?

たとえば、これを行うことができるように:

$person = ORM::factory('person', 7);
echo $person->fullname;

これの代わりに:

$person = ORM::factory('person', 7);
echo $person->firstname.' '.$person->lastname;

もう 1 つの例はis_young、人の年齢を計算し、年齢が特定の数値を下回った場合に true を返すプロパティです。

4

3 に答える 3

4

次のような「魔法の」__get()方法を使用できます。

public function __get($column)
{
    switch($column)
    {
        case 'fullname' : 
            return $this->firstname.' '.$this->lastname;

        case 'is_young' :
            // calculate persons age
    }
    return parent::__get($column);
}

fullname()または、 andのような追加のメソッドを作成することもできますage()(私には良いようです)。

于 2010-09-09T05:15:41.620 に答える
0

このソリューションを使用してみませんか?

class Model_Person extends ORM 
{
      public function fullname()
      {
           return $this->firstname.' '.$this->lastname;
      }
 }

$person = ORM::factory('person', 1); 
echo $person->fullname();
于 2012-11-06T20:12:59.690 に答える
0

で次のことができますapplication/classes/ORM.php ( application/classes/orm.php3.2 より前の Kohana の場合)。

<?php
class ORM extends Kohana_ORM {
    public function __get($name) {
        $getter = 'get_' . $name;
        if (method_exists($this, $getter)) {
            return $this->$getter();
        }

        return parent::__get($name);
    }
}

次に、モデル クラスにメソッドを追加するだけです。

public function get_fullname() {
    return $this->firstname . ' ' . $this->lastname;
}

そして、プロパティとしてアクセスできるようにします。

于 2013-05-03T12:45:20.497 に答える