PHP魔术常量与魔术方法
PHP魔术常量与魔术方法
魔术常量(Magic constants)
__CLASS__
__CLASS__ 表示代码所在类的类名。
如果处在命名空间下,将包含命名空间。
namespace KK;
class Myclass
{
public static function show_class_name()
{
echo __CLASS__;
}
}
Myclass::show_class_name(); //'KK\Myclass'
如果在非类内调用,将会返回空字符串。
echo __CLASS__; //''
__DIR__
__DIR__ 表示代码所在文件的路径,不包含文件名及目录末尾的斜杠。
__FILE__
__FILE__ 表示代码所在文件的路径,包含文件名。
__FUNCTION__
__FUNCTION__ 表示代码所在函数的函数名。
function show_function_name()
{
echo __FUNCTION__;
}
show_function_name(); //'show_function_name'
如果在非函数中调用,将会返回空字符串。
echo __FUNCTION__; //''
也可以在方法中使用,将会返回方法名。
class Myclass
{
public static function show_function_name()
{
echo __FUNCTION__;
}
}
Myclass::show_function_name(); //'show_function_name'
__LINE__
__LINE__ 表示文件中代码所在的行号。
<?php
echo __LINE__; //2
?>
__METHOD__
__METHOD__ 表示代码所在方法的方法名。
class Myclass
{
public static function show_method_name()
{
echo __METHOD__;
}
}
Myclass::show_method_name(); //'Myclass::show_method_name'
输出格式为 ‘类名::方法名’ ,和__FUNCTION__略有不同。
如果在函数内使用,返回和__FUNCTION__一样。
function show_method_name()
{
echo __METHOD__;
}
show_method_name(); //'show_method_name'
如果在非方法、非函数中调用,将会返回空字符串。
echo __METHOD__; //''
__NAMESPACE__
__NAMESPACE__ 表示代码所在的命名空间。
不存在命名空间时,返回空字符串。
__TRAIT__
__TRAIT__表示代码所在trait的类名。
如果处在命名空间下,将包含命名空间。
namespace KK;
trait Mytrait
{
public static function show_trait_name()
{
echo __TRAIT__;
}
}
class Myclass
{
use Mytrait;
}
Myclass::show_trait_name(); //'KK\Mytrait'
如果在非trait内调用,将会返回空字符串。
echo __TRAIT__; //''
魔术方法(Magic methods)
__construct()
__construct() 构造函数。
当父类定义了构造函数并且没使用private修饰符,而且子类没有定义构造函数时,会自动继承父类的构造函数。
子类定义了构造函数时,要想使用父类的构造函数,可以使用parent::__construct()调用。
__destruct()
__destruct() 析构函数。
析构函数会在脚本结束时、使用exit/die时、对象引用都被删除时、对象被显式销毁时被调用。
当父类定义了析构函数并且没使用private修饰符,而且子类没有定义析构函数时,会自动继承父类的析构函数。
子类定义了析构函数时,要想使用父类的析构函数,可以使用parent::__destruct()调用。
__call()
__call() 调用对象中不可访问的方法时,此方法会被调用。
public function __call($name, $arguments)
第一个参数是被调用的方法名,第二个参数是被调用的方法参数数组。
__callStatic()
__callStatic() 调用对象中不可访问的静态方法时,此方法会被调用。
public static function __callStatic($name, $arguments)
与__call()一样,第一个参数是被调用的方法名,第二个参数是被调用的方法参数数组。
__get()
__get() 读取不可访问的属性时,此方法会被调用。
public function __get($name)
参数为操作的属性名。
__set()
__set() 在给不可访问的属性赋值时,此方法会被调用。
public function __set($name, $value)
第一个参数为操作的属性名,第二个参数为给此属性赋的值。
__isset()
__isset() 对不可访问属性使用isset()或empty()时,此方法会被调用。
public function __isset($name)
参数为操作的属性名。
__unset()
__unset() 对不可访问属性使用unset()时,此方法会被调用。
public function __unset($name)
参数为操作的属性名。
__sleep()
__sleep() 使用serialize()序列化对象时,此方法会被调用。
public function __sleep()
此方法需要返回一个包含对象中需要被序列化的变量名称的数组,如果没有返回,会报错。
__wakeup()
__wakeup() 使用unserialize()恢复对象时,此方法会被调用。
public function __wakeup()
__toString()
__toString() 当对象被当做字符串时,如echo (new Myclass),此方法会被调用。
public function __toString()
此方法必须返回一个字符串,否则会报错。
__invoke()
__invoke() 当尝试以调用函数的方式调用对象时,此方法会被调用。
public function __invoke()
__set_state()
__set_state() 当对对象使用var_export()时,此方法会被调用。
__clone()
__clone() 克隆对象时,此方法会被调用。
__debugInfo()
__debugInfo() 当对对象使用var_dump()时,此方法会被调用。