我想通过php的魔法__get方法访问数组的最后一个元素。
我正在使用php的结尾($ array)返回。
如果我这样做:
class fun {
protected $var = 'test';
protected $arr = array(1, 2);
public function __get($name) {
return $this->$name;
}
public function get_array() {
return end($this->arr);
}
}
$obj = new fun();
var_dump($obj->var); //gives me: string(4) "test"
var_dump($obj->get_array()); //gives me: int(2);
一切都运转良好。到目前为止一切都很好。
我不想使用不同的" getters"对于变量和数组。我希望该方法找出是否调用了变量或数组,然后返回值。
我认为这也可以通过$ name参数轻松完成:
class funfun {
protected $var = 'more test';
protected $arr = array(1, 2, 3);
public function __get($name) {
if(is_array($this->$name)) {
$ret = end($this->$name);
} else {
$ret = $this->$name;
}
return $ret;
}
}
$obj2 = new funfun();
var_dump($obj2->var); //gives me string(9);
但
var_Dump($obj2->arr); // gives me:
//array(3) {[0]=> int(1) [1]=> int(2) [2]=> int(3)}
如果我在__get()方法中转储它:
public function __get($name) {
if(is_array($this->$name)) {
var_dump(end($this->$name));
}
它给了我"权利"结果:int(3)。
我错过了什么吗? 这是语义错误吗? PHP的返回不是为此而设计的吗?