类变量的默认值

Nea*_*eal 5 php default properties class

让我们说我有一个看起来像这样的类:

class UserModel {
    private $_userData;
    function __construct($user_data){
          $this->_userData = $user_data;
    }
}
Run Code Online (Sandbox Code Playgroud)

这被称为:

$user = json_decode('{"name":"Neal","surname":"MyLastName"}'); 
$the_user = new UserModel($user);
Run Code Online (Sandbox Code Playgroud)

我不希望每次我想让用户的名字必须$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)
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我想要做的演示:http://codepad.viper-7.com/cuS9Lx

cwa*_*ole 3

我不确定这是否正是您想要的方式。就我个人而言,如果我有默认值,我会将它们全部放在类级别上,然后以这种方式检索它们:

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
Run Code Online (Sandbox Code Playgroud)

它的占用空间较小,并且更有“解决默认”的感觉。