課程
/后端開發
/PHP
/PHP進階篇
上面命名就是一個私有的數組,將屬性名直接當做了鍵名,屬性值當做了鍵值,為什么最后直接$car->name就輸出了呢?啊,頭大!
2015-09-14
源自:PHP進階篇 2-9
正在回答
這個不難理解:當你向類中不存在的屬性賦值時,__set會自動運行,而且參數也是自動傳遞的。我們可以在類中提供一個“容器”,用于保存動態創建的成員屬性。而且當訪問一個不存在的屬性是,__get會被自動調用,我們可以從這個“容器”找,找到就返回否則就返回null。__set和__get成為魔術方法,但是邏輯要自己實現。
好回答
補充一下:題主說的不準確:class?Car?{
? ? private?$ary?=?array();? ??
? ? public?function?__set($key,?$val)?{// 賦值 ?
? ? ? ? $this->ary[$key]?=?$val;
? ? }//例子其他無關的去掉了只留下這些? ?
}
$car?=?new?Car();
$car->name?=?'汽車';? //向類中不存在的屬性賦值時,__set會自動運行,參數(name 是鍵值,"汽車"是變量值)傳遞(name 傳遞給$key,"汽車"傳遞給$val) ==》name屬性動態創建并賦值
echo?$car->name;
奧奧,謝謝,好像明白了。也就是說在最開始動態創建屬性時,會自動調用__set()方法,然后將鍵值和鍵名都賦給私有的數組。在訪問這個屬性時,會自動調用__get()方法,在get方法內部是可以訪問這個私有數組的,通過將這個私有數組中鍵名為$key的數組中的一項返回,在客戶端的代碼看來,我們就已經得到了name屬性的值。就像你說的,__set和__get提供自動調用機制,但是邏輯的實現還是自己寫的。
舉報
輕松學習PHP中級課程,進行全面了解,用PHP快速開發網站程序
1 回答PHP類和對象之重載
3 回答用面向對象方法來做金字塔,大神進
1 回答求大神指點
2 回答求大神指點
2 回答類和對象這點看不懂
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2015-09-14
這個不難理解:當你向類中不存在的屬性賦值時,__set會自動運行,而且參數也是自動傳遞的。我們可以在類中提供一個“容器”,用于保存動態創建的成員屬性。而且當訪問一個不存在的屬性是,__get會被自動調用,我們可以從這個“容器”找,找到就返回否則就返回null。__set和__get成為魔術方法,但是邏輯要自己實現。
2016-03-01
好回答
2016-03-01
補充一下:題主說的不準確:class?Car?{
? ? private?$ary?=?array();? ??
? ? public?function?__set($key,?$val)?{// 賦值 ?
? ? ? ? $this->ary[$key]?=?$val;
? ? }//例子其他無關的去掉了只留下這些? ?
}
$car?=?new?Car();
$car->name?=?'汽車';? //向類中不存在的屬性賦值時,__set會自動運行,參數(name 是鍵值,"汽車"是變量值)傳遞(name 傳遞給$key,"汽車"傳遞給$val) ==》name屬性動態創建并賦值
echo?$car->name;
2015-09-17
奧奧,謝謝,好像明白了。也就是說在最開始動態創建屬性時,會自動調用__set()方法,然后將鍵值和鍵名都賦給私有的數組。在訪問這個屬性時,會自動調用__get()方法,在get方法內部是可以訪問這個私有數組的,通過將這個私有數組中鍵名為$key的數組中的一項返回,在客戶端的代碼看來,我們就已經得到了name屬性的值。就像你說的,__set和__get提供自動調用機制,但是邏輯的實現還是自己寫的。