魔術方法是以兩個下劃線 '__' 開頭,具有特殊作用的一些方法,可以看做 php 的 「語法糖」。
語法糖:指那些沒有個計算機語言新增新功能,而只是對人類來說更 「甜蜜」 的語法,語法糖往往給程式設計師提供了更實用的編碼方式或者一些技巧的用法,有益於更好的編碼風格,是**更易讀。不過其並沒有給語言新增什麼新東西。php 裡的引用、spl 等都屬於語法糖。php中的魔術方法常用的有 __set()、__get()、__call()、__callstatic()、__tostring()、__construct()、__destruct()。
若在類中定義了 __set()、__get() 這一對魔術方法,那麼當給物件屬性賦值或者取值時,即使這個屬性不存在,也不會報錯,一定程度上增強了程式的健壯性。
當呼叫乙個不可訪問的方法(如未定義,或者不可見)時,__call() 會被呼叫。跟 __call() 方法配套的魔術方法是 __callstatic() 。當然,使用魔術方法 「 防止呼叫不存在的方法而報錯 」,並不是魔術方法的本意。實際上,魔術方法是方法的動態穿件變為可能,這在 mvc 等框架設計中是很有用的語法。假設乙個控制器呼叫了不存在的方法,那麼只要定義了 __call() 魔術方法,就能友好的處理這種情況。通常 __callstatic() 也可用於 orm 中實現動態建立和延遲繫結。
再看另外乙個魔術方法 __tostring 用於列印乙個物件時,看看這個物件都有哪些屬性,其值是什麼,如果定義了 __tosting() 方法,就能在測試時列印出物件體,物件就會自動呼叫它所屬類定義的 __tostring 方法,也可以自己定製,更易於理解。
為什麼直接 echo 輸出乙個物件就會報語法錯誤,而如果這個物件實現 __tostring() 方法後就可以直接輸出呢?原因很簡單,echo 本來就可以列印乙個物件,而且也實現了這個藉口,但是 php 對其做了個限制,只有實現 __tostring() 後才雲訊使用,這個從 php 的源**裡可以得到驗證,由此可見,魔術方法並不神奇。
只是在實際開發中,魔術方法就經常用到了。
PHP中魔術常量
line 檔案中的當前行號。file 檔案的完整路徑和檔名。如果用在被包含檔案中,則返回被包含的檔名。自 php 4.0.2 起,file 總是包含乙個絕對路徑 如果是符號連線,則是解析後的絕對路徑 而在此之前的版本有時會包含乙個相對路徑。dir 檔案所在的目錄。如果用在被包括檔案中,則返回被包括的...
PHP5中魔術方法
魔術函式 1。construct 例項化物件時被呼叫,當 construct和以類名為函式名的函式同時存在時,construct將被呼叫,另乙個不被呼叫。2。destruct 當刪除乙個物件或物件操作終止時被呼叫。3。call 物件呼叫某個方法,若方法存在,則直接呼叫 若不存在,則會去呼叫 call...
php中的魔術方法應用例項
獲取當前類名 echo class 當前函式名 confirm echo function 當前方法名 bankcard confirm echo method 在php5中,預定義了兩個函式 get 和 set 來獲取和賦值其屬性,get 方法 這個方法用來獲取私有成員屬性值的,有乙個引數,引數傳...