魔術方法就是在特定場景下不需要呼叫而自動執行的方法。因為有魔術方法,所以我們的類可以寫得很靈活~
__construct #構造方法,在類被例項化時自動呼叫,一般用於初始化操作;
__destruct #析構方法,物件被銷毀時自動呼叫;
__clone() #轉殖方法,當物件被轉殖時,將會自動呼叫
__get($key) #屬性獲取方法,當物件要呼叫乙個被保護或不存在的屬性時,__get方法就會自動被呼叫,並傳入呼叫的屬性名稱;
__set($key,$val) # 屬性設定方法,當物件設定乙個被保護或不存在的屬性時,__set會被執行,並傳入要設定的屬性名稱和屬性值,注意這裡的設定令物件本身沒有發生改變,除非更改操作是發生在__set方法內;但無論如何,都不可以為物件增加本來就沒有的屬性,只有對已有的屬性進行操作;
__isset($key) # 當用isset判斷乙個物件是否有這個屬性,並且這個屬性是被保護或者不存在時被自動執行,並傳入判斷的屬性名稱;
__unset($key) # 同上,當用unset刪除乙個物件的保護屬性或未存在的屬性時,自動被執行;
__isset($key) #__isset方法如果返回乙個為true的值時,isset的判斷就會失效,不管本類有沒有其判斷的屬性,isset都會返回真;
__call($method,$arguments) # 當物件在呼叫乙個被保護或不存在的方法時,會自動執行,並傳入兩個引數$method為方法嗎,$arguments為該方法的引數陣列;
__callstatic($method,$arguments) # 當呼叫了類當中某個被保護或不存在的靜態方法時,會自動執行,並傳入兩個引數$method為方法,$arguments為該方法的引數陣列;注意,是靜態方法,並且是php5.3新增的魔術方法;
__tostring() # 輸出物件引用時自動呼叫;
__invoke() # $obj = class();$obj()時執行該函式
<?php
#魔術方法概覽:
class magic
public function __tostring()
public function __invoke()
public function func()
private function privatefunc()
public function __destruct()
public function __clone()
public function __get($key) ";
} public function __set($key , $val)\"和屬性值->\"\";
注意,這裡的設定並沒有令物件本身的屬性值發生改變或增加";
/*__set方法的使用:
1.利用本方法預留乙個介面,有條件的限制類外部操作類內部被保護的屬性;
2.框架中一般private乙個$data的陣列,用set方法對其增加陣列元素,然後來操作這個陣列;
*/} public function __isset($key)\"
注意,本方法如果返回乙個為true的值時,isset的判斷就會失效,不管本類有沒有其判斷的屬性 ->\"\",都會返回真
"; return true;
} public function __unset($key)\" ";
} public function __call($method , $arguments)\"(方法名); \$arguments ---->(引數陣列)";
print_r($arguments);
echo "";
} public static function __callstatic($method , $arguments)\"(方法名); \$arguments ---->(引數陣列)";
print_r($arguments);
echo "注意:只能是類::staticmethod,並且本方法是php5.3版本才更新的";
echo "";
}}$obj = new magic();
# __invoke
$obj(); 以後這樣搞就等於是直接呼叫類裡面的__invoke()方法
# __tostring
//如果沒有__tostring就會報錯;object of class magic could not be converted to string
//但是有__tostring方法的話,不僅tostring方法會被呼叫,並且還會返回tostring中返回的值;
echo $obj;
# __clone;
// $obj1 = clone $obj;
#__get($key)獲取保護和不存在的屬性↓↓;
$obj->privateproperty; //呼叫被保護的屬性;
$obj->zxg; //呼叫不存在的屬性;
#__set($key,$val)設定保護和不存在的屬性↓↓:
print_r($obj);
echo " ";
$obj->privateproperty = "通過__set方法改變了屬性值;";
$obj->zxg = "xgg"; //未存在的屬性;
print_r($obj);//$obj本身沒有發生改變,除非更改操作是發生在__set方法內;但無論如何,都不可以為物件增加屬性,只有對已有的屬性進行操作;
echo " ";
#__isset($key)方法的使用
echo isset($obj->jyh) ? "有jyh屬性(事實上是沒有這個屬性的,但__isset方法返回真,其就為真)" : "沒有jyh屬性";
echo " ";
#__unset($key)方法的使用
unset($obj->zxg);
#__call($method,$arguments)
$obj->privatefunc('arg1' , 'arg2' , 'arg3');
#__callstatic($method,$arguments)
magic::zhouzhou(27 , 'pig');
?>
php魔術常量,魔術方法
魔術常量 1。line 返回檔案中的當前行號。2。file 返回檔案的完整路徑和檔名。如果用在包含檔案中,則返回包含檔名。自php4.0.2 起,file 總是包含乙個絕對路徑,而在此之前的版本有時會包含乙個相對路徑。3。function 返回函式名稱 php4.3.0 新加 自php5 起本常量返...
invoke 魔術 PHP 魔術方法
php 魔術方法 構造方法 construct 析構方法 destruct get 與 set unset call 和 callstatic sleep 和 wakeup clone tostring invoke set state debuginfo construct 這個方法應該是最常用的...
php魔術方法
php5魔術方法 魔術函式 1。construct 建構函式 例項化物件時被呼叫,當 construct和以類名為函式名的建構函式同時存在時,construct將被呼叫,另乙個不被呼叫。2。destruct 析構函式 當刪除乙個物件或物件操作終止時被呼叫 程式結束後物件就摧毀 永遠都是最後執行的。3...