get中 $this->Name 用不了

来源:5-4 魔术方法之__get和__set方法

GNEZ

2015-11-11 17:13

class Test{

private $aa=1;

function __get($proName){

return $this->proName;

}

}


$test=new Test();

echo $test->aa;


写回答 关注

2回答

  • 思君满月
    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的手册是最详细的。



    慕婉清825...

    疑问:这样写的目的是关于这两个魔术方法的用途?可以用__set()来设置成员变量,__get()来获取成员变量的值,这样随意添加成员变量真的好吗?

    2022-03-13 11:16:11

    共 2 条回复 >

  • 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;


    GNEZ

    请问为什么这里要加$? 我还试了将 $this->$proName 改为 $this->aa; 没有加$也成功了,为什么呢?

    2015-11-11 18:41:42

    共 1 条回复 >

PHP面向对象编程

从容应对面试官的知识宝典,带你握面向对象的最重要的核心能力

70182 学习 · 362 问题

查看课程

相似问题