PHP中有一項非常神奇的特性,那就是magic methods魔術方法,其中classname magic又是其中十分重要的一種。
名稱中的"magic"一詞意味著這些方法是能夠在類對象的創建、屬性的賦值、方法的調用、以及類本身不存在時進行操作。classname magic主要使用了兩個方法:__get和__set。
對于__get方法來說,它是用于在對類中未定義的屬性進行訪問時被自動調用的方法。例如,當調用一個未定義的屬性時,__get方法將會被調用并返回一個值,或者在未定義的屬性被寫入時將一個值賦給它。
class MyClass { private $myprop; function __get($name) { return $this->myprop; } function __set($name, $value) { $this->myprop = $name; } } $myobj = new MyClass(); $myobj->hello = "world";//調用__set方法,將"world"賦值給$myprop屬性 echo $myobj->hello;//調用__get方法,輸出"world"
注意到__get和__set方法的參數分別為$name和$value,這兩個參數用于獲取和寫入屬性的值。
當然,如果我們將__set方法的參數$value修改為該屬性的類型,手動過濾掉錯誤類型的輸入也是可行的。
class MyClass { private $myprop; function __get($name) { return $this->myprop; } function __set($name, $value) { if(gettype($value)!="string"){//過濾非字符串類型 return; } $this->myprop = $name; } } $myobj = new MyClass(); $myobj->hello = "world";//輸出"world" $myobj->hello = 1;//無輸出
總之,classname magic為開發者提供了在訪問未定義屬性的情況下進行操作的機會,這可以大大簡化代碼,并使得錯誤排查更加方便。
上一篇php class 釋放
下一篇php class使用