魔術方法 Magic methods

2021-08-19 03:05:06 字數 2512 閱讀 5828

php中把以兩個下劃線__開頭的方法稱為魔術方法,這些方法在php中充當了舉足輕重的作用。 魔術方法包括:

建構函式和析構函式應該不陌生,他們在物件建立和消亡時被呼叫。例如我們需要開啟乙個檔案,在物件建立時開啟,物件消亡時關閉

<?php

class

fileread

function

__destruct()}

?>

這兩個方法在繼承時可以擴充套件,例如:

<?php

class

tmpfileread

extends

fileread

function

__destruct()}

?>

在物件中呼叫乙個不可訪問方法時會呼叫這兩個方法,後者為靜態方法。這兩個方法我們在可變方法(variable functions)呼叫中可能會用到。

<?php

class

methodtest

public

static

function

__callstatic

($name, $arguments)

}$obj = new methodtest;

$obj->runtest('in object context');

methodtest::runtest('in static context');

?>

當get/set乙個類的成員變數時呼叫這兩個函式。例如我們將物件變數儲存在另外乙個陣列中,而不是物件本身的成員變數

<?php

class

methodtest

public

function

__get

($name)

public

function

__isset

($name)

public

function

unset

($name)

}?>

當我們在執行serialize()unserialize()時,會先呼叫這兩個函式。例如我們在序列化乙個物件時,這個物件有乙個資料庫鏈結,想要在反序列化中恢復鏈結狀態,則可以通過重構這兩個函式來實現鏈結的恢復。例子如下:

<?php

class

connection

private

function

connect

() public

function

__sleep

() public

function

__wakeup()}

?>

物件當成字串時的回應方法。例如使用echo $obj;來輸出乙個物件

<?php

// declare a ****** class

class

testclass

}$class = new testclass();

echo $class;

?>

這個方法只能返回字串,而且不可以在這個方法中丟擲異常,否則會出現致命錯誤。

呼叫函式的方式呼叫乙個物件時的回應方法。如下

<?php

class

callableclass

}$obj = new callableclass;

var_dump(is_callable($obj));

?>

呼叫var_export()匯出類時,此靜態方法會被呼叫。

<?php

classa}

$a = new a;

$a->var1 = 5;

$a->var2 = 'foo';

var_dump(var_export($a));

?>

當物件複製完成時呼叫。例如在設計模式詳解及php實現:單例模式一文中提到的單例模式實現方式,利用這個函式來防止物件被轉殖。

<?php

public

class

singleton

public

static

function

getinstance

() return

self::$_instance;

}// 防止轉殖例項

public

function

__clone()}

?>

php中的常量大部分都是不變的,但是有8個常量會隨著他們所在**位置的變化而變化,這8個常量被稱為魔術常量。

這些魔術常量常常被用於獲得當前環境資訊或者記錄日誌。

with 魔術方法

with open demo1.py as fp print fp.read enter self exit enter 魔術方法 使用with語句的時候,會呼叫這個魔術方法 這個方法的返回值可以作為as x的值 exit self,exc type,exc val,exc tb 魔術方法 1.執行...

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 這個方法應該是最常用的...