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 相关文章推荐
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
php excel类 phpExcel使用方法介绍
Aug 21 PHP
探讨php中header的用法详解
Jun 07 PHP
PHP获取文件相对路径的方法
Feb 26 PHP
php简单socket服务器客户端代码实例
May 18 PHP
php计算整个目录大小的方法
Jun 01 PHP
php实现可运算的验证码
Nov 10 PHP
如何写php守护进程(Daemon)
Dec 30 PHP
php中的登陆login实例代码
Jun 20 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
PHP递归的三种常用方式
Feb 28 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
Oct 17 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
一个简单的自动发送邮件系统(三)
2006/10/09 PHP
php实现mysql备份恢复分卷处理的方法
2014/12/26 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
2015/05/11 PHP
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
2006/10/17 Javascript
JS正则验证邮箱的格式详细介绍
2013/11/19 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
2014/06/20 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
字太多用...代替的方法(两种)
2017/03/15 Javascript
激动人心的 Angular HttpClient的源码解析
2017/07/10 Javascript
node.js express框架简介与实现
2019/07/23 Javascript
layui 实现表单和文件上传一起传到后台的例子
2019/09/16 Javascript
微信小程序吸底区域适配iPhoneX的实现
2020/04/09 Javascript
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
python的unittest测试类代码实例
2017/12/07 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
HomeAway的巴西品牌:Alugue Temporada
2018/04/10 全球购物
俄罗斯汽车零件和配件在线商店:CarvilleShop
2019/11/29 全球购物
如何利用cmp命令比较文件
2016/04/11 面试题
营业经理岗位职责
2013/11/10 职场文书
《美丽的彩虹》教学反思
2014/02/25 职场文书
财务情况说明书范文
2014/05/06 职场文书
责任担保书范文
2014/05/21 职场文书
暑期政治学习心得体会
2014/09/02 职场文书
教师工作总结范文2014
2014/11/10 职场文书
2015中学政教处工作总结
2015/07/22 职场文书
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL