为了账号安全,请及时绑定邮箱和手机立即绑定

get中 $this->Name 用不了

class Test{

private $aa=1;

function __get($proName){

return $this->proName;

}

}


$test=new Test();

echo $test->aa;


正在回答

2 回答

楼上错解。

$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的手册是最详细的。



0 回复 有任何疑惑可以回复我~
#1

思君满月

上面代码return $this->pro[$name];
2015-11-11 回复 有任何疑惑可以回复我~
#2

慕婉清8255408

疑问:这样写的目的是关于这两个魔术方法的用途?可以用__set()来设置成员变量,__get()来获取成员变量的值,这样随意添加成员变量真的好吗?
2022-03-13 回复 有任何疑惑可以回复我~

少了个美元符

<?php

class Test
{
    private $aa = 1;
    
    public function __get($proName)
    {
        return $this->$proName;
    }
}

$test = new Test();
echo $test->aa;


0 回复 有任何疑惑可以回复我~
#1

GNEZ 提问者

请问为什么这里要加$? 我还试了将 $this->$proName 改为 $this->aa; 没有加$也成功了,为什么呢?
2015-11-11 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

get中 $this->Name 用不了

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信