结尾的魔术__get()($ array)或$ var

时间:2015-04-29 13:28:32

标签: php arrays get

我想通过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的返回不是为此而设计的吗?

0 个答案:

没有答案