【发布时间】:2011-09-22 02:34:43
【问题描述】:
假设我有一个如下所示的类:
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。
如果我为姓名和姓氏设置默认值,并像这样创建__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
【问题讨论】:
-
我不确定我看到的问题到底是什么?你在做什么没有错,如果它适合你的需要,那就去做吧。请注意,您可能想使用
protected而不是private变量。 -
注意:在性能方面,知道执行上述各种 isset() 需要多少时间会很有趣。
标签: php class properties default