PHP才学没几天写了段代码 大家参考下为什么运行结果会有不同。大家帮忙解释下原因程序A:class ClassA {
private $name; function __construct($n){
echo "构造函数开始"."<br>";
$this->name = $n;

function __set($name,$v){
$this->name = $v;
} function __get($name){
return $this->name;
}

function destruct(){

}
}$classA = new ClassA('name的初始值');
echo $classA->$name."<br>";
$classA->$name = "name的改变值";
echo $classA->$name;
?>输出结果为:(这个结果可以理解
构造函数开始
name的初始值
name的改变值程序B:(在程序A基础上做了改动标注为红色
class ClassA {
private $name; function __construct($n){
echo "构造函数开始"."<br>";
$this->name = $n;

function __set($name,$v){
$this->name = $v;//更改为$this->$name = $v
         } function __get($name){
return $this->name;
}

function destruct(){

}
}$classA = new ClassA('name的初始值');
echo $classA->$name."<br>";
$classA->$name = "name的改变值";
echo $classA->$name;
?>
输出结果为:
构造函数开始
name的初始值
name的初始值谁能帮忙解释下?

解决方案 »

  1.   

    把这部分code和你的code比较一下, 
    最好你copy/paster过来,
    你现在贴的东西是无法得出你的结果的$classA = new ClassA('name的初始值');
    echo $classA->$name."<br>";
    $classA->$name = "name的改变值";
    echo $classA->$name;
      

  2.   

    这样写是错误的
    $classA->$name = "name的改变值";
    echo $classA->$name;
    因为 $name 没有赋值类定义应该这样
    class ClassA {
      private $name;
      function __construct($n){
        echo "构造函数开始"."<br>";
        $this->name = $n;
      }  
      function __set($name,$v){
        $this->$name = $v;
      }
      function __get($name){
        return $this->$name;
      }
    }你还可以用 print_r($classA);
    查看执行后的类属性分配情况
      

  3.   

    LZ要弄清楚,
     $classA->$name和$classA->name是不同的:
     比如 $name = 'var';
     $classA->$name => $classA->var;
     $classA->name => $classA->name;
      

  4.   


    请问
    $classA->$name和$classA->name
    这两种方式有什么不同有什么区别?