PHP的魔術方法與魔術常量
阿新 • • 發佈:2019-02-10
魔術常量
__LINE__ 檔案中的當前行號。
__FILE__ 檔案的完整路徑和檔名。如果用在被包含檔案中,則返回被包含的檔名
__DIR__ 檔案所在的目錄。除非是根目錄,否則目錄中名不包括末尾的斜槓。
__FUNCTION__ 返回該函式被定義時的名字(區分大小寫)。
__CLASS__ 返回該類被定義時的名字(區分大小寫)。
__TRAIT__ 常量返回 trait 被定義時的名字(區分大小寫)
__METHOD__ 返回該方法被定義時的名字(區分大小寫)。
__NAMESPACE__ 當前名稱空間的名稱(區分大小寫)。
魔術方法
<?php
Class Magicmethods
{
public $name = 'a';
public function __construct()
{
echo '__construct----##建立了一個物件'.'<br>';
}
public function __destruct()
{
echo '__destruct----##'.$this->name.'釋放了一個物件'.'<br>';
}
public function __set($name,$value )
{
echo "__set----##設定的成員屬性{$name}等於{$value}不存在".'<br>';
}
public function __get($name)
{
echo "__get----##獲取成員屬性{$name}不存在".'<br>';
}
public function __isset($name)
{
echo "__isset----##isset({$name})成員屬性{$name}不存在".'<br>';
}
public function __unset($name)
{
echo "__unset----##unset({$name})成員屬性{$name}不存在".'<br>';
}
public function __toString()
{
return "__toString----##當類被當成字串時的反應:我是一個類".__CLASS__.'<br>';
}
public function __clone()
{
$this->name = 'b';
echo "__clone----##克隆出來的物件呼叫了此方法".__CLASS__.'<br>';
}
public function __call($name, $aarguments)
{
echo "__call----##呼叫了一個不存在的方法{$name}".'<br>';
}
public function __sleep()
{
echo "__sleep----##serialize()方法序列化呼叫此方法"."<br>";
return [];
}
public function __wakeup()
{
echo "__wakeup----##unserialize()方法序列化呼叫此方法"."<br>";
}
public function __invoke($arg)
{
echo '__invoke----##當物件被當作函式呼叫'.$arg.'<br>';
}
public static function __callStatic($name, $aarguments)
{
echo "__callStatic----##呼叫了一個不存在的靜態方法{$name}".'<br>';
}
public function __set_state()
{
echo '__set_state----##var_export()匯出類方法呼叫了這個方法'.'<br>';
}
public function __debugInfo()
{
echo '__debugInfo----##var_dump()顯示的內容';
}
}
$obj = new Magicmethods(); //呼叫__construct()
$obj->a = 3; //呼叫__set()
$obj->b; //呼叫__get();
isset($obj->c); //呼叫__isset
empty($obj->c); //呼叫__isset
unset($obj->c); //呼叫__unset
echo $obj; //呼叫__toString
$obj2 = clone $obj; //呼叫__clone
$obj->test(); //呼叫__call()
$str = serialize($obj); //呼叫__sleep()
unserialize($str); //呼叫__wakeup
$obj(5); //呼叫__invoke
$obj::test(); //呼叫__callstatic
var_export($obj); //呼叫__set_state
echo '<br>';
var_dump($obj); //呼叫__debugInfo()
echo '<br>';