class stu
$stu1=new stu();
$stu1->name='xiaoming';//屬性不存在 為物件自動新增
$stu1->getname();//不存在 報錯
上例中 定義了乙個stu類,類內只有$age屬性,當將其實例化後,由於類內未定義name屬性,$stu1物件新增了該屬性,並對該屬性賦值。所以相當於該物件訪問了不存在的成員,即為php中的過載。$stu1物件對不存在的方法getname()的訪問也是php中的過載。由結果可知,屬性的過載和函式的過載的處理結果不同,當屬性不存在是,過載會為物件自動新增,而當方法不存在是,系統會報錯
在php中使用魔法方法處理過載情況
按照處理的內容不同 分為屬性過載和方法過載
對屬性的操作大概可以歸為屬性的讀、寫、判斷屬性是否存在和屬性的刪除四種操作,每種操作對應乙個魔法函式
讀:__get() 當試圖訪問乙個不可訪問的屬性值時,會自動呼叫
寫:__set(屬性名、屬性值) 設定乙個不可訪問的值時 自動呼叫
判斷屬性是否存在:__isset() 當試圖判斷乙個不可訪問的屬性是否存在時自動呼叫
屬性的刪除:unset() 當試圖刪除乙個不可訪問的成員時自動呼叫
以__get()魔法方法為例,私有屬性在外部是不能被訪問的,為了保證私有方法在外部不被訪問到,需要在魔術方法中限定可以訪問到的屬性。在本例中,將可訪問到的屬性儲存在乙個陣列中,當訪問屬性時,如果該屬性在陣列中,將允許訪問;如果不在陣列中,將阻止其訪問
class stu }}
$stu1=new stu();
echo $stu1->age;訪問限制 報錯
關於方法魔法函式有_call()和_staticcall()
__call(): 在物件中呼叫乙個不可訪問方法時,
會被自動呼叫
__staticcall(): 用靜態方式呼叫乙個不可訪問方法時,
會被自動呼叫
php中的過載
php中的 過載 與其它絕大多數物件導向語言不同。傳統的 過載 是用於提供多個同名的類方法,但各方法的引數型別和個數不同。php所提供的 過載 overloading 是指動態地 建立 類屬性和方法,是通過魔術方法 magic methods 來實現的。具體來說分為兩類 1.屬性過載 public ...
PHP中的過載
先區分一下過載 overload 和重寫 override 過載指多個名字相同,但引數不同的函式在同一作用域並存的現象 重寫出現在繼承中,指子類重定義父類功能的現象,也被稱為覆蓋。過載中說的引數不同有三種情況 引數個數不同,引數型別不同,引數順序不同。重寫一般指函式的覆蓋,即相同簽名的成員函式在子類...
PHP中的過載
先區分一下過載 overload 和重寫 override 過載指多個名字相同,但引數不同的函式在同一作用域並存的現象 重寫出現在繼承中,指子類重定義父類功能的現象,也被稱為覆蓋。過載中說的引數不同有三種情況 引數個數不同,引數型別不同,引數順序不同。重寫一般指函式的覆蓋,即相同簽名的成員函式在子類...