欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 有了构造函数,我们可以像下面的代码一样实例化一个Device类的对象。 1 $device=new Device('iPhone',$battery); 2.析构函数:__destruct() 与构造函数相反,析构函数是在对象被销毁时由系统自

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

有了构造函数,我们可以像下面的代码一样实例化一个Device类的对象。

1 $device=new Device('iPhone',$battery);

2.析构函数:__destruct()

与构造函数相反,析构函数是在对象被销毁时由系统自动调用的。在类中定义构造函数的方式如下:

public function __destruct(){

$this->disconnect();

}

在这个析构函数中,在对象被销毁之前,析构器先调用了类中的disconnect()函数。

三、属性重载

根据PHP手册中的说明,PHP所提供的"重载"(overloading)是指动态地"创建"类属性和方法。我们是通过魔术方法(magic methods)来实现的。

当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用,换句话说,当访问一个类中可访问的方法或属性时,重载方法不会被调用。所有的重载方法都必须被声明为 public.

1.__get()

当读取不可访问属性的值时,__get() 会被调用。

2.__set()

在给不可访问属性赋值时,__set() 会被调用。

3.__isset()

当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。

4.__unset()

当对不可访问属性调用 unset() 时,__unset() 会被调用。

四、将对象转换为字符串:__toString()

在我们试图将对象当做一个普通字符串来对待时,__toString方法会被调用。比如,当我们打印一个对象时,就会自动调用该函数,如:echo $对象名,如果没有定义__toString方法,那么PHP将返回一个错误。

五、克隆对象:__clone()

当我们克隆一个对象时,魔术方法__clone()会被自动调用

六、对象序列化

序列化是将任何数据转化为字符串格式的一个过程。通过序列化,我们可以将一个完整的对象保存在一个文件或者保存在数据库中。有关序列化的一个问题是,并不是所有的数据都可以被序列化,例如一个数据库连接。

1.__sleep()

当我们对一个对象使用serialize()函数时,__sleep()函数会被调用。

2.__wakeup()

当我们对一个对象使用unserialize()函数时,__wakeup()函数会被调用。

七、方法重载

1.__call()

在对象中调用一个不可访问方法时,__call() 会被调用。

2.__callStatic() (PHP 5.3)

用静态方式中调用一个不可访问方法时,__callStatic() 会被调用。

八、将对象当作函数使用

1.__invoke

当我们试图将对象当做函数来使用时,该方法会被调用。

九、自动加载类

1.__autoload()

该方法是我们在实例化一个类时,允许程序自动寻找类文件,并将类文件加载到当前脚本,可以简化很多我们对require的使用。

[1] [2]

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php魔术方法在手册哪看,探秘PHP中的魔术方法相关推荐

  1. python读取数据集的方法_Python读取数据集并消除数据中的空行方法

    如下所示: # -*- coding: utf-8 -*- # @ author hulei 2016-5-3 from numpy import * import operator from os ...

  2. python extract方法_在多个项目类中使用extract方法

    我不是一个有经验的程序员,不要生我的气- 我正在探索一些小的可能性(我有一些Python编程技巧).在 废弃一个网站:让我们想象一下,我们可以从opengraph(og:)中提取一些信息,比如&quo ...

  3. js代码 父页面调用子页面中的js方法,子页面调用父页面中的js方法

    文中代码亲测可用,转载以示尊重!!! <!--主页面中的JS代码--> <script type="text/javascript"> //调用子页面的方法 ...

  4. 一句话给大家阐明 java中的方法签名!!!!Java中什么是方法签名

    如题:what is method signature in java? answer:Definition: Two of the components of a method declaratio ...

  5. java怎么调用void方法_如何使用反射在java中调用void方法

    如果我使用反射调用方法,我可以让它正常工作而不抛出空指针异常的唯一方法是在我调用的方法中返回一个int值. 例如,我想调用的方法: public int setScore(int n) { this. ...

  6. java方法执行的时间_计算Java中任意一个方法的执行时间的工具类

    1 packagealgorithm.study.utils;2 3 importjava.lang.reflect.Method;4 5 /** 6 * This class is getting ...

  7. PHP5中的魔术方法

    一. __construct(),类的构造函数 php中构造方法是对象创建完成后第一个被对象自动调用的方法.在每个类中都有一个构造方法,如果没有显示地声明它,那么类中都会默认存在一个没有参数且内容为空 ...

  8. 搞懂钩子方法和模板方法,看完这篇就够了

    通常的模板方法模式中会设计一个 abstract 的抽象方法,交给它的子类实现,这个方法称为模板方法.而钩子方法,是对于抽象方法或者接口中定义的方法的一个空实现,也是模板方法模式的一种实现方式. 1 ...

  9. 【转】探秘Java中的String、StringBuilder以及StringBuffer

    探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一 ...

最新文章

  1. ST表 (模板) 洛谷3865
  2. numpy中reshape方法详解
  3. 鸿蒙系统发红包,鸿蒙修真录红包版
  4. There is no configured/running web-servers found! Please, run any web-configuration and hit the Refr
  5. Java 泛型实现方法 — 擦拭法
  6. HDU多校联合赛(1007 Magical Forest)模拟题
  7. (转)淘淘商城系列——商品搜索功能测试
  8. JavaScript学习(二十三)—scrollTop练习
  9. 重构wangEditor(web富文本编辑器),欢迎指正!
  10. 《大学之路》读书笔记(上)范文3700字
  11. 决策树之CART 算法
  12. 【开发工具】【Bus Hound】USB抓包工具(Bus Hound)的使用
  13. 硬件电路之运算放大器3--比较器和跟随器
  14. ubuntu16.04安装翻译软件stardict
  15. Linux系统(centos/ubuntu)修改IP地址方法总结
  16. C# Winform右下角弹窗方式
  17. JS实现浏览器菜单命令
  18. Android自定义锁屏的实现
  19. Kotlin与Java的异同
  20. MEMS光学器件— MEMS OXC(光交叉互连开关)

热门文章

  1. 升级bugzilla 到最新版本成功 bugzilla 3.2
  2. 对于Ubuntu服务器杀毒的一次记录
  3. c语言计算机二级考试推荐用书,国家计算机二级C语言(考试用书方面)
  4. 2020年中国皮肤科用药行业现状及竞争格局,市场需求较大「图」
  5. 【OP放大电路设计基础篇】1.op放大器运行
  6. Oracle分区表(一)
  7. iOS-OC-widget使用教程
  8. 普乐蛙7d影院设备|4d立体电影院|移动式5D影院
  9. 我偶尔会用到的调试方法 | Linux 内核
  10. 【莓知识】转载-blackberry语音拨号使用操作教程