PHP中常用的魔術方法

2022-06-10 18:33:11 字數 2173 閱讀 8702

我們在php中經常用到魔術方法,像構造方法,析構方法等等魔術變數,下面總結一下一些常用的魔術變數:

__construct(),__destruct(),__clone(),__autoload(),__tostring(),__invoke(),__set(),__get(),__unset(),__isset(),__call(),__callstatic;

1,__constuct()建構函式

通常例項化完乙個物件之後,都要對該物件的屬性進行初始化!在例項化乙個物件的時候,php系統會自動的呼叫乙個名字叫作__construct()的方法,我們把這個方法叫作「構造方法」!

其中,構造方法可以沒有引數!

<?php

class stu

}//例項化stu物件

$stu = new stu('孫悟空','500');

2.__destruct()析構方法

與構造方法是一對,構造方法是在乙個物件「出生」的時候由系統自動呼叫的,而析構方法是在乙個物件「消失」的時候由系統自動呼叫的!

析構方法的名字叫__destruct();注意裡面不能有任何的引數!

<?php

//析構方法

public function __destruct()

?>

注意:析構方法是在物件銷毀之前呼叫的! 

作用:析構方法的作用一般是用來釋放該物件所占用的額外的資源,而不是銷毀該物件本身!

3,__clone()轉殖

觸發時機:是在轉殖乙個物件的時候,對新物件進行初始化的工作

//轉殖方法在轉殖物件的時候對新物件的初始化工作

public function __clone()

思考:

轉殖出來的物件還是不是student類中的乙個例項呢?

我們可以利用instanceof運算子來進行判斷!

instanceof就是用來判斷某個物件是否是某個類的乙個例項!

需要兩個運算元,前面是乙個物件變數,後面是乙個類名!返回乙個布林值!

var_dump($stu instanceof stu);     //返回bool(true)

4.__autoload()自動載入類

當呼叫不存在的類的時候自動呼叫!

<?php /**

* 自動載入類

* 需要什麼類__autoload會自動呼叫需要的檔案**/

public

function __autoload($class_name

).class.php";

} ?>

5.__tostring()

當將物件當成字串使用的時候自動呼叫

6.__invoke()

當將物件當成函式使用的時候自動呼叫

7,__set()

當對無法訪問的屬性賦值時自動呼叫(比如:類外呼叫私有屬性)

8.__get()

當對獲取無法訪問的屬性值的時候自動呼叫

9.__unset()

當銷毀無法訪問的屬性的時候自動呼叫

10.__isset()

當判斷無法訪問的屬性是否存在的時候自動呼叫

11.__call()

當呼叫無法訪問的普通方法時自動觸發

<?php 

class

stu}

$stu = new

stu();

//此時stu類裡沒有show()方法,會觸發__call()函式

$stu->show();

12.__callststic()

當無法通過靜態方法訪問時自動觸發

<?php 

class

stu}

$stu = new

stu();

//此時stu類裡沒有show()方法,會觸發__call()函式

$stu::show();

PHP中常用的魔術方法

construct destruct clone autoload tostring invoke set get unset isset call callstatic 1,const程式設計客棧uct 建構函式 通常例項化完乙個物件之後,都要對該物件的屬性進行初始化!在例項化乙個物件的時候,ph...

php類中常用的魔術方法

1.construct 建構函式,2.destruct 析構函式,3.call callstatic 呼叫乙個不可訪問的方法 呼叫不可訪問的靜態方法時被呼叫 class demo1 php version 5.3.0 之後才可以 public static function callstatic n...

php常用魔術方法

魔術方法和建構函式 construct和複製物件時自動呼叫的函式 clone相似,都是在執行某一操作時會被呼叫,通常和乙個關鍵字相連。通常情況下在類中會定義私有屬性,這是為了保護資料而使用的措施,但是也給我們帶來了麻煩。想要修改它們的值時,是通過呼叫我們定義的介面函式來完成的。每次需要修改變數都要呼...