php的常用魔术方法

只能说常用,因为魔术方法太多了,但是我们经常打交道的有限。

__construct():
类的构造方法,实例化类时调用:
class Bar{
    function __construct($name){
        $this->name = $name;
        echo "call construct";
    }
}
new Bar();//call construct;
__destruct()
类的析构方法,销毁对象时调用:
class Bar{
    function __destruct(){
        echo "destruct";
    }
}
$bar = new Bar();
$bar = null;//destruct
unset($bar);//destruct
__get()
__set()
__get()和__set()是一对,起到的作用仿佛是为每个成员变量都隐含的设置了get和set方法,
所以,在外部设置局部变量也成为可能,就像是访问public权限的变量一样。
class Bar{
    private $name;
    function __get($key){
        return $this->$key;
    }
    function __set($key,$value){
        $this->key = $value;
    }
}
$bar = new Bar();
$bar->name = 'foo';
echo $bar->name;//foo
__clone()
使用clone自动调用__clone()方法:
class Bar{
    function __clone(){
        echo "clone object";
    }
}
$bar = new Bar();
$foo = clone $bar;//clone object

关于__clone官方有更好的说明

__sleep()
序列化对象时调用
__wakeup()
反序列化对象时调用

与一般的对象(如数组),类对象(自定义的class)的实例化和反实例化,尤其是单例(singleton)的序列化比较复杂,我们将用另一篇文章来说明。

__toString()
打印一个对象时调用:
class Bar{
    private $item = array(1,2,3);
    function toString(){
        echo implode($this->item,',');
    }
}
__invoke()
以函数的方式调用一个方法时自动调用__invoke():
class Bar{
    function __invoke($str)
    {
        // TODO: Implement __invoke() method.
        echo $str;
    }
}

$bar = new Bar;
$bar('foo');//foo
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,803评论 18 399
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,391评论 11 349
  • 前言 本文主要参考 那些年,我们一起写过的“单例模式”。 何为单例模式? 顾名思义,单例模式就是保证一个类仅有一个...
    tandeneck阅读 2,541评论 1 8
  • 一. Java基础部分.................................................
    wy_sure阅读 3,853评论 0 11