php魔術常數介紹和魔術函數使用程式碼說明總結

伊谢尔伦
發布: 2023-03-14 09:30:02
原創
1333 人瀏覽過

魔術常數 

1。 LINE 
傳回檔案中的目前行號。 

2。 FILE 
傳回檔案的完整路徑和檔案名稱。如果用在包含檔案中,則傳回包含檔案名稱。自 PHP 4.0.2 起,FILE 總是包含一個絕對路徑,而在此之前的版本有時會包含一個相對路徑。 

3。 FUNCTION 
傳回函數名稱(PHP 4.3.0 新加)。自 PHP 5 起本常數傳回該函數被定義時的名字(區分大小寫)。在 PHP 4 中該值總是小寫字母的。 

4。 CLASS 
傳回類別的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常數傳回該類別被定義時的名字(區分大小寫)。在 PHP 4 中該值總是小寫字母的。 

5。 METHOD 
傳回類別的方法名稱(PHP 5.0.0 新加)。傳回該方法被定義時的名字(區分大小寫)。

什麼是魔術函數? 

對於開頭的函數就命名為魔術函數, 此類函數都在特定的條件下觸發的.例如: set() get()等
在設定或取不存在的屬性時候觸發.
有那些魔術函數呢?
總的來說, 有下面幾個魔術函數
construct() destruct() get() set() isset() unset() call() callStatic()
sleep() wakeup() toString#() set_state() clone() autoload()
construct()當實例化一個物件的時候,這個物件的這個方法首先被呼叫。
destruct()當刪除一個物件或物件操作終止的時候,呼叫該方法。 

class test1 { 
public function construct() { 
var_dump(function); 
} 
public function destruct() { 
var_dump(function); 
} 
} 
$t1 = new test1 ; 
unset($t1);
登入後複製

get當試圖讀取一個不存在的屬性的時候被呼叫。
set當試圖向一個不存在的屬性寫入值的時候被呼叫。
isset當試圖偵測一個並不存在的屬性時候被呼叫。
unset當試圖取消一個並不存在的屬性時候被呼叫。

class test2 { 
public $name3; 
public function set($key, $value) { 
var_dump(function. ' 
KEY:' 
.$key.' 
Value:' 
.$value); 
} 
public function get($key) { 
var_dump(function. 'KEY:'.$key); 
} 
public function isset($key) { 
var_dump(function. ' KEY:'.$key); 
} 
public function unset($key) { 
var_dump(function. ' KEY:'.$key); 
} 
} 
$t =new test2 ; 
$t->name = "steven"; 
$t->name2; 
$t->name3; 
isset($t->name2); 
isset($t->name3); 
unset($t->name4);
登入後複製

sleep當進行序列化物件時候呼叫
wakeup當進行反序列物件時候呼叫
需要注意一點:
1. sleep()必須傳回一個陣列或物件(一般返回的是$this),傳回的值將會被用來做為序列化的
值。
如果不傳回這個值,則序列化失敗。這也意味著反序列化將不會觸發wakeup事件。
2. 序列化會保存預設賦值的屬性.如果要透過實例化賦值的內容,則需要屬性在sleep()傳回數組的
指定.
如$id與$id2的區別.

class test3 { 
public $name = "steven"; 
public $id = "1"; public $id2; 
public function sleep() { 
var_dump(function); // 序列化不成功.没有返回值.反序列也失败 // 
return array("name"); // 序列化成功.有返回值.反序列成功.id2属性能被恢复 // 
return array("name", "id2");// 序列化成功.有返回值.反序列成功.id2属性不能被恢复 
return array("name"); } 
public function testEcho() { 
var_dump($this->name); 
var_dump($this->id); 
var_dump($this->id2); 
} 
public function wakeup() { 
var_dump(function); 
$this->testEcho(); 
} 
} 
$t3= new test3 ; 
$t3->id2 = uniqid(); 
$t3s = serialize($t3); 
unserialize($t3s);
登入後複製

toString當直接列印一個物件的時候,這個方法將會被呼叫 

class test4 { 
public function toString() { 
return "toString"; 
} 
} 
$t4 = new test4(); 
echo $t4; 
print $t4; 
var_dump($t4); 
print_r($t4);
登入後複製


call($func, $param) 當嘗試呼叫一個不存在的方法的時候被呼叫.
這個方法必須有兩個參數,第一個為呼叫的方法名,第二個是一個被呼叫方法的參數數組。
要注意的是,當你在一個子類別呼叫父類別的private的方法,或是在實例裡呼叫類別的非protect方法的
時候,並不會呼叫call() 

class test5 { 
public function call($func, $param) { 
var_dump('Function:'.$func); 
var_dump($param); 
} 
} 
$t5 = new test5; 
$t5->echoTest('xx','xx','xx');
登入後複製


callStatic()當嘗試呼叫一個不存在的靜態方法的時候被呼叫
這個方法必須有兩個參數,第一個為呼叫的方法名,第二個是一個被呼叫方法的參數數組。
在PHP5.3中出現 

class test51 { 
public function callStatic($fun, $param) { 
var_dump('Function:'.$func); 
var_dump($param); 
} 
} 
test51::test('xx','xx','xx');
登入後複製

set_state()當用var_export導出實例的時候被呼叫.此方法有一個參數,為包含所導出的實例的所
有成員屬性的一個陣列 

class test6 { 
public function set_state($arr){ 
var_dump($arr); 
} 
} 
$t6 = new test6; 
$t6->age = "12"; 
var_export($t6, true); 
var_export($t6); 
eval(' 
$b=' 
.var_export($t6,true).';'); 
print_r($b);
登入後複製

clone()當複製實例時候被呼叫.
注意:
1.在php5裡,物件間的賦值總是以位址引用來傳遞的.
2 .如果要以實際值來傳遞,則需要用到clone關鍵字
3.clone的只是實例。如果實例中的某個成員屬性也是實例,那麼這個成員屬性還是會以引用方法被
傳遞到新的實例。
// 物件間的賦值總是以位址引用來傳遞的. $t71 $t72的age屬性是一樣的. 

class test71 { 
public $age = 10; 
} 
$t71 = new test71(); 
$t72 = $t71 ; 
var_dump($t71->age) ; 
$t71->age =12 ; 
var_dump($t71->age) ; 
var_dump($t72->age) ; // 如果要以实际值来传递,则需要用到clone关键词 $t73 = clone $t71; $t71->age = 13 ; var_dump($t71->age) ; 
var_dump($t73->age) ; // 如果实例中的某个成员属性也是个实例,那么这个成员属性还是会以引用方法被传递到新的实例。
登入後複製

autoload()函數.當建立一個實例化的時候,如果對應的類別不存在,則會被呼叫 

function autoload($class) { 
   if ( $class == "test8" ){ 
require_once
 
dirname
(FILE).'/class8.php';  
} 
} 
spl_autoload(); 
$t8 = new test8; 
var_dump($t8->age);
登入後複製


以上是php魔術常數介紹和魔術函數使用程式碼說明總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!