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