php 魔術方法 魔術常量

2021-09-26 04:14:11 字數 2020 閱讀 9089

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

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

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

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

<?php

class 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)

return $object_name;

}public function __isset($name)

public function __unset($name)

}?>

當我們在執行serialize()unserialize()時,會先呼叫這兩個函式。例如我們在序列化乙個物件時,這個物件有乙個資料庫鏈結,想要在反序列化中恢復鏈結狀態,則可以通過重構這兩個函式來實現鏈結的恢復。serialize() 函式會檢查類中是否存在乙個魔術方法 __sleep()。unserialize() 會檢查是否存在乙個 __wakeup() 方法

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

<?php

namespace designpatterns\structural\fluentinte***ce;

class sql

public function from(string $table, string $alias): sql

public function where(string $condition): sql

public function __tostring(): string

}echo (new sql()) ->select(['foo', 'bar'])->from('foobar', 'f')->where('f.bar = 1');

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

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

<?php

class callableclass

}$obj = new callableclass;

$obj(5);

var_dump(is_callable($obj));

?>

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

當物件複製完成時呼叫。例如在設計模式

詳解及php實現:單例模式一文中提到的單例模式實現方式,利用這個函式來防止物件被轉殖。

<?php

class test

}$t = new test();

$t1 = clone $t;

PHP高階特性 魔術方法 魔術常量

是php物件導向中特有的特性。它們在特定的情況下被觸發,都是以雙下劃線開頭,你可以把它們理解為鉤子,利用魔術方法可以輕鬆實現php物件導向中過載 overloading即動態建立類屬性和方法 魔術方法很多還是成對出現的,以下列出目前php中所有的模式方法。1.construct和 destruct ...

php魔術常量,魔術方法

魔術常量 1。line 返回檔案中的當前行號。2。file 返回檔案的完整路徑和檔名。如果用在包含檔案中,則返回包含檔名。自php4.0.2 起,file 總是包含乙個絕對路徑,而在此之前的版本有時會包含乙個相對路徑。3。function 返回函式名稱 php4.3.0 新加 自php5 起本常量返...

PHP魔術方法和魔術常量

具體的解釋如下 1。construct 例項化物件時被呼叫,當 construct和以類名為函式名的函式同時存在時,construct將被呼叫,另乙個不被呼叫。2。destruct 當刪除乙個物件或物件操作終止時被呼叫。3。call 物件呼叫某個方法,若方法存在,則直接呼叫 若不存在,則會去呼叫 c...