假设我有一个非常简单的模型,如下所示:
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;
另一个例子可能是is_young
属性,可以计算人的年龄,如果年龄低于某个数字,则返回true。
答案 0 :(得分: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()
和age()
(对我来说似乎更好)。
答案 1 :(得分:0)
为什么不使用这个解决方案?
class Model_Person extends ORM
{
public function fullname()
{
return $this->firstname.' '.$this->lastname;
}
}
$person = ORM::factory('person', 1);
echo $person->fullname();
答案 2 :(得分:0)
您可以在application/classes/ORM.php
中执行以下操作
(3.2 {之前的Kohana application/classes/orm.php
):
<?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;
}
并且能够将其作为财产进行访问。