为什么这些神奇的方法不起作用?

时间:2015-03-23 00:10:30

标签: php oop magic-methods

运行此代码后的结果如下,有人可以解释为什么没有正确传递名称,以便说“Icefeet已经岁了” 我在这里错过了什么吗?

  

已经岁了

<?php


class Penguin  {

  public function __construct($name) {
      $this->species = 'Penguin';
      $this->name = $name;
  }

  public function __toString() {
      return $this->name . " (" . $this->species . ")\n";
  }

  public function getPenguinFromDb($id) {
    // elegant and robust database code goes here
  }

  public function __get($field) {
    if($field == 'name') {
      return $this->username;
    }
  }

  public function __set($field, $value) {
    if($field == 'name') {
      $this->username = $value;
    }
  }

  public function __call($method, $args) {
      echo "unknown method " . $method;
      return false;
  }
}



$tux = new Penguin('Icyfeet');
echo $tux->created;
echo $tux->name . " is " . $tux->age . " years old\n";


?>

1 个答案:

答案 0 :(得分:1)

我认为您正在尝试访问用户名而不是名称。

 public function __get($field) {
    if($field == 'name') {
      return $this->name;
    }
  }

那么,在此之前,请声明该类的所有字段,如:

private $ name =''; 私人$ species ='企鹅';