在PHP中_get()函数接受一个属性名作为输入参数,可获得该属性的值,成功返回TRUE,否则返回FALSE。可我经过调试,实在是调试不出我想要的结果。
代码如下: class OOPDEMO{
var $username;
var $city;
protected $wage;
function _get($proname){
echo "_get() called<br>";
$vars =array("username","city");
if(in_array($proname,$vars)){
return  $this->$proname;
}else{
return "no such variable";
}
}
}
$oopdemo = new OOPDEMO();
$oopdemo->username="kevin.young";
echo $oopdemo->username."<br>";
echo $oopdemo->age;我要得到这样的结果:
kevin.young
_get() called
no such variable可是这个程序跑起来却得不到这样的结果,请教高人指点!

解决方案 »

  1.   

    class OOPDEMO{
      var $username;
      var $city;
      protected $wage;
      function __get($proname){
        echo "_get() called<br>";
        $vars =array("username","city");
        if(in_array($proname,$vars)){
          return  $this->$proname;
        }else{
          return "no such variable";
        }
      }    
    }
    $oopdemo = new OOPDEMO();
    $oopdemo->username="kevin.young";
    echo $oopdemo->username."<br>";
    echo $oopdemo->age;
      

  2.   

    首先,魔术函数是__get()不是_get(),其次你的in_array($proname,$vars)永远不会true,因为对于类已经定义的属性是不会调用__get(),只有当现有属性找不到时才会调用魔术函数。__call, __get, __set等都是同理。
    <?php
    class OOPDEMO{
    var $username;
    var $city;
    var $info = array();
    protected $wage;
    function __set($proname,$value){
    $this->info[$proname] = $value;
    }
    function __get($proname){
    if(array_key_exists($proname,$this->info)){
    return  $this->info[$proname].' by __get()';
    }else{
    return "no such variable";
    }
    }
    }
    $oopdemo = new OOPDEMO();
    $oopdemo->username="kevin.young";
    $oopdemo->nickname="kevin";
    $oopdemo->info['user']="young";
    echo $oopdemo->username."<br>";
    echo $oopdemo->nickname."<br>";
    echo $oopdemo->user."<br>";
    echo $oopdemo->age;
    ?>
      

  3.   

    首先,你是没有理解这个魔术函数的作用建议再看一下手册,__get是用于获取么有属性的时候,会自动调用,一般用__set合起用