php 魔术方法使用说明


Posted in PHP onOctober 20, 2009

PHP5.0后,php面向对象提成更多方法,使得php更加的强大!!
一些在PHP叫魔术方法的函数,在这里介绍一下:其实在一般的应用中,我们都需要用到他们!!

1.__construct() 当实例化一个对象的时候,这个对象的这个方法首先被调用。
Java代码
class Test { function __construct() { echo "before"; } } $t = new Test();
class Test { function __construct() { echo "before"; } } $t = new Test();
输出是:
start
我们知道php5对象模型 和类名相同的函数是类的构造函数,那么如果我们同时定义构造函数和__construct()方法的话,php5会默认调用构造函数而不会调用__construct()函数,所以__construct()作为类的默认的构造函数
2.__destruct() 当删除一个对象或对象操作终止的时候,调用该方法。
Java代码
class Test { function __destruct() { echo "end"; } } $t = new Test();将会输出end
class Test { function __destruct() { echo "end"; } } $t = new Test();将会输出end
我们就可以在对象操作结束的时候进行释放资源之类的操作
3.__get() 当试图读取一个并不存在的属性的时候被调用。

如果试图读取一个对象并不存在的属性的时候,PHP就会给出错误信息。如果在类里添加__get方法,并且我们可以用这个函数实现类似java中反射的各种操作。
Java代码
class Test { public function __get($key) { echo $key . " 不存在"; } } $t = new Test(); echo $t->name; 就会输出:name 不存在
class Test { public function __get($key) { echo $key . " 不存在"; } } $t = new Test(); echo $t->name; 就会输出:name 不存在
4.__set() 当试图向一个并不存在的属性写入值的时候被调用。
Java代码
class Test { public function __set($key,$value) { echo '对'.$key . "附值".$value; } } $t = new Test(); $t->name = "aninggo"; 就会输出:对 name 附值 aninggo
class Test { public function __set($key,$value) { echo '对'.$key . "附值".$value; } } $t = new Test(); $t->name = "aninggo"; 就会输出:对 name 附值 aninggo

5.__call() 当试图调用一个对象并不存在的方法时,调用该方法。
Java代码
class Test { public function __call($Key, $Args) { echo "您要调用的 {$Key} 方法不存在。你传入的参数是:" . print_r($Args, true); } } $t = new Test(); $t->getName(aning,go);
class Test { public function __call($Key, $Args) { echo "您要调用的 {$Key} 方法不存在。你传入的参数是:" . print_r($Args, true); } } $t = new Test(); $t->getName(aning,go);
程序将会输出:
Java代码
您要调用的 getName 方法不存在。参数是:Array
(
[0] => aning
[1] => go
)
您要调用的 getName 方法不存在。参数是:Array
(
[0] => aning
[1] => go
)
6.__toString() 当打印一个对象的时候被调用

这个方法类似于java的toString方法,当我们直接打印对象的时候回调用这个函数
class Test { public function __toString() { return "打印 Test"; } } $t = new Test(); echo $t;
运行echo $t;的时候,就会调用$t->__toString();从而输出
打印 Test
7.__clone() 当对象被克隆时,被调用

class Test { public function __clone() { echo "我被复制了!"; } }$t = new Test(); $t1 = clone $t;程序输出:我被克隆了!

PHP 相关文章推荐
使用 php4 加速 web 传输
Oct 09 PHP
PHP性能优化 产生高度优化代码
Jul 22 PHP
php empty() 检查一个变量是否为空
Nov 10 PHP
PHP中实现中文字符进制转换原理分析
Dec 06 PHP
基于php实现长连接的方法与注意事项的问题
May 10 PHP
php数组合并的二种方法
Mar 21 PHP
PHP 使用memcached简单示例分享
Mar 05 PHP
php实现的操作excel类详解
Jan 15 PHP
php处理带有中文URL的方法
Jul 11 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
Jul 13 PHP
简单的pgsql pdo php操作类实现代码
Aug 25 PHP
Laravel5.1 框架表单验证操作实例详解
Jan 07 PHP
关于Appserv无法打开localhost问题的解决方法
Oct 16 #PHP
php foreach、while性能比较
Oct 15 #PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
Oct 15 #PHP
php 数学运算验证码实现代码
Oct 11 #PHP
用mysql触发器自动更新memcache的实现代码
Oct 11 #PHP
基于OpenCV的PHP图像人脸识别技术
Oct 11 #PHP
PHP 身份验证方面的函数
Oct 11 #PHP
You might like
PHP中的按位与和按位或操作示例
2014/01/27 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
各种快递查询--Api接口
2016/04/26 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
JQuery动画和停止动画实例代码
2013/03/01 Javascript
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
nodejs修复ipa处理过的png图片
2016/02/17 NodeJs
JS中type="button"和type="submit"的区别
2017/07/04 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
js布局实现单选按钮控件
2020/01/17 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS VG
2014/05/25 DOTA
[01:39:42]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
2016/02/19 Python
Python自动发邮件脚本
2017/03/31 Python
Pycharm学习教程(4) Python解释器的相关配置
2017/05/03 Python
PyCharm 常用快捷键和设置方法
2017/12/20 Python
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
Numpy之文件存取的示例代码
2018/08/03 Python
pandas每次多Sheet写入文件的方法
2018/12/10 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
单位领导证婚词
2014/01/14 职场文书
目标管理责任书
2014/04/15 职场文书
活动总结报告范文
2014/05/04 职场文书
感恩的演讲稿
2014/05/06 职场文书
政府信息公开实施方案
2014/05/09 职场文书
学校安全防火方案
2014/06/07 职场文书
民事和解协议书格式
2014/11/29 职场文书
电工生产实习心得体会
2016/01/22 职场文书
Python利用FlashText算法实现替换字符串
2022/03/31 Python
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏