php - 类变量的默认值

标签 php class properties default

假设我有一个看起来像这样的类:

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/

相关文章:

php - AJAX 不解析 PHP 中的数据

php - 基于字符串 "1,5,3,7"的 SQL 查询 -> 保持结果顺序

javascript - 在全局范围内从类重新分配的方法中实际引用 "this"的是什么?

c++ - 从两个相同的派生类派生一个类

javascript - 是否可以捕获 JavaScript 中的属性访问?

javascript - 将 localStorage 数据发送到 PHP

python - 在 Tkinter Gui 中创建框架类

java - 如何在整个类(class)中使用配置属性文件?

windows - 如何以编程方式设置 "Run this program as an administrator"

javascript - HTML - 两个表单,通过 'enter' 按键知道我正在输入哪个表单