PHP魔術方法小結 md

2022-05-07 07:51:09 字數 3155 閱讀 7632

魔術方法就是在特定場景下不需要呼叫而自動執行的方法。因為有魔術方法,所以我們的類可以寫得很靈活~

__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...