php魔术方法

1.__get、__set

这两个方法是为在类和他们的父类中没有声明的属性而设计的

__get($property)   当调用一个未定义的属性时,此方法会被触发,传递的参数是被访问的属性名

__set($property, $value) 给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值

2.__isset、__unset

__isset($property)    当在一个未定义的属性上调用isset()函数时调用此方法

__unset($property)  当在一个未定义的属性上调用unset()函数时调用此方法

3.__call

__call($method, $arg_array)   当调用一个未定义的方法时调用此方法

未定义的方法包括没有访问权限访问的方法;如果方法不存在就去父类中找这个方法,如果父类中也不存在就去调用本类的__call()方法,如果本类中不存在__call()方法就去找父类中的__call()方法

4.__autoload

__autoload函数,会在试图使用尚未被定义的类时自动调用,通过调用此函数,脚本引擎在php出错失败前有了最后一个机会加载所需的类

如果定义一个全局的自动加载类,则必须用spl_autoload_register()方法将处理类注册到php标准库

5.__construct、__destruct

__construct构造方法,当一个对象创建时调用此方法

__destruce析构方法,对象被销毁前调用这个方法,析构函数允许使用一个对象之后执行任意代码来清除内存

在一个函数的命名空间内,这会发生在函数return的时候,对于全局变量,这发生于脚本结束的时候,如果想明确的销毁一个对象,可以给指向该对象的变量分配任何其它值,通常将变量赋值为null或者unset

6.__clone

对象赋值是使用的引用赋值,如果想复制一个对象则需要使用clone方法,在调用此方法时对象会自动调用__clone魔术方法,如果在对象复制需要执行某些初始化操作,可以在__clone方法实现

7.__toString

__toString方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时

如果类没有实现此方法,则无法通过echo打印对象

8.__sleep、__wakeup

__sleep串行化的时候用

__wakeup反串行化的时候用

serialize()检查类中是否有魔术名称__sleep的函数,如果是这样,该函数将在任何序列化之前运行。它可以清除对象并应该返回一个包含有该对象中应被序列化的所有变量名的数组

使用__sleep的目的是关闭对象可能具有的任何数据库连接,提交等待中的数据或进行类似的清除任务,如果有非常大的对象而并不需要完全存储下来时此函数也很有用

unserialize()检查具有魔术名称__wakeup的函数的存在,如果存在,此函数可以重建对象可能具有的任何资源,使用__wakeup的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。

9.__set_state

当调用var_export()时,这个静态方法会被调用

本方法的唯一参数是一个数组,其中包含按array('property'=>value,...)格式排列的类属性

10.__invoke

当尝试调用函数的方法调用一个对象时,__invoke方法会被自动调用

11.__callStatic

类似于__call()魔术方法,__callStatic()为了处理静态方法调用

必须是公共的,并且必须被声明为静态的,__call()魔术方法必须被定义为公共的,所有其他魔术方法都必须如此











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值