假设我有一个看起来像这样的类:
class UserModel {
private $_userData;
function __construct($user_data){
$this->_userData = $user_data;
}
}
它是这样调用的:
$user = json_decode('{"name":"Neal","surname":"MyLastName"}');
$the_user = new UserModel($user);
我不希望每次我想获取用户名时都必须在类中执行 $this->_userData->name
。
如果我为 name 和 surname 设置一个默认值,并像这样创建一个 __get()
函数是否可以:
class UserModel {
private $_userData;
private $name = 'default';
private $surname = 'default';
function __construct($user_data){
$this->_userData = $user_data;
}
function __get($var){
if(isset($this->_userData->$var))return $this->_userData->$var; // new storage
if(isset($this->$var))return $this->$var; // old storage
return null; // the default (could be a throw new Exception() instead)
}
}
这是我正在尝试做的演示:http://codepad.viper-7.com/cuS9Lx
最佳答案
我不确定这是否正是您想要的方式。就个人而言,如果我有默认值,我会将它们全部放在类级别,然后以这种方式检索它们:
class Foo
{
static $bar = 1;
private $_udata;
public function __get($a)
{
return (isset($this->_udata->$a))?
$this->_udata->$a:
self::$$a; // NOTE DOUBLE $!
}
};
$f = new Foo(); echo $f->bar; // 1
它的占用空间更小,而且更有“解析为默认值”的感觉。
关于php - 类变量的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6469505/