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

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

php面向對象的重載不懂,請大神指點

上面命名就是一個私有的數組,將屬性名直接當做了鍵名,屬性值當做了鍵值,為什么最后直接$car->name就輸出了呢?啊,頭大!

正在回答

4 回答

這個不難理解:當你向類中不存在的屬性賦值時,__set會自動運行,而且參數也是自動傳遞的。我們可以在類中提供一個“容器”,用于保存動態創建的成員屬性。而且當訪問一個不存在的屬性是,__get會被自動調用,我們可以從這個“容器”找,找到就返回否則就返回null。__set和__get成為魔術方法,但是邏輯要自己實現。

2 回復 有任何疑惑可以回復我~

好回答

0 回復 有任何疑惑可以回復我~

補充一下:題主說的不準確: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;


2 回復 有任何疑惑可以回復我~

奧奧,謝謝,好像明白了。也就是說在最開始動態創建屬性時,會自動調用__set()方法,然后將鍵值和鍵名都賦給私有的數組。在訪問這個屬性時,會自動調用__get()方法,在get方法內部是可以訪問這個私有數組的,通過將這個私有數組中鍵名為$key的數組中的一項返回,在客戶端的代碼看來,我們就已經得到了name屬性的值。就像你說的,__set和__get提供自動調用機制,但是邏輯的實現還是自己寫的。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
PHP進階篇
  • 參與學習       181921    人
  • 解答問題       2668    個

輕松學習PHP中級課程,進行全面了解,用PHP快速開發網站程序

進入課程

php面向對象的重載不懂,請大神指點

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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