亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號