PHP的魔术方法与魔术常量

魔术常量

__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>';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值