Laravel 是 PHP 的经典案例、知识宝库、实践案例。
在 Laravel 会发现一些很巧妙,且不常见的 PHP 高级用法,因为没用过,也不知道,看起来确实很神秘。
在 Laravel Model 中,查出的数据,即可用对象属性方式访问,还能用数组方式访问。
查看 vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php 代码发现:
Model.php 实现了 __get() 魔术方法,并实现了 ArrayAccess 接口。
马上查阅下PHP手册,只有针对 ArrayAccess::offsetExists、ArrayAccess::offsetGet、ArrayAccess::offsetSet、ArrayAccess::offsetUnset 的介绍,其实类只要实现这些方法即可。
立刻做个实验:
$name;
}
public function offsetExists($offset) {
// TODO: Implement offsetExists() method.
return isset($this->$offset);
}
public function offsetGet($offset) {
// TODO: Implement offsetGet() method.
return $this->$offset;
}
public function offsetSet($offset, $value) {
// TODO: Implement offsetSet() method.
$this->$offset = $value;
}
public function offsetUnset($offset) {
// TODO: Implement offsetUnset() method.
}
}
$obj = new obj();
echo $obj['name'];打印结果:
D:\web\test>php class.php peter
在 Laravel 里面大量使用了这种方法,让代码使用起来非常方便,但如果不知道原理,也会带来困扰。