问答详情
源自:5-4 魔术方法之__get和__set方法

get中 $this->Name 用不了

class Test{

private $aa=1;

function __get($proName){

return $this->proName;

}

}


$test=new Test();

echo $test->aa;


提问者:GNEZ 2015-11-11 17:13

个回答

  • 思君满月
    2015-11-11 18:56:09

    楼上错解。

    $this->proName; 其实就是在访问对象的proName属性,但是这个属性是不存在的,所以肯定报错。

    你一定是觉得proName会被替换成$proName的值吧。

    你肯定纳闷过为什么类的属性在定义的时候要$,如$aa,但访问的时候却不需要,如$this->aa;

    原因就在于此,为了避免歧义。

    __get的真正用法是这样的:

    class Demo{
        private $pro = array();
        public __set($name, $value){
            $this->pro[$name] = $value;
        }
        
        public __get($name){
            if(isset($this->pro[$name])){
                return isset($this->pro[$name];
            }
            return null;
        }
    }

    有什么不懂得去看手册吧,PHP的手册是最详细的。



  • Ruchee
    2015-11-11 17:18:25

    少了个美元符

    <?php
    
    class Test
    {
        private $aa = 1;
        
        public function __get($proName)
        {
            return $this->$proName;
        }
    }
    
    $test = new Test();
    echo $test->aa;