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 相关文章推荐
PHP基于数组实现的分页函数实例
Aug 20 PHP
PHP中shuffle数组值随便排序函数用法
Nov 21 PHP
php计算两个文件相对路径的方法
Mar 14 PHP
PHP实现批量修改文件后缀名的方法
Jul 30 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
PHP简单实现遍历目录下特定文件的方法小结
May 22 PHP
PHP使用数组实现矩阵数学运算的方法示例
May 29 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
基于laravel Request的所有方法详解
Sep 29 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
Oct 04 PHP
PHP高并发和大流量解决方案整理
Mar 09 PHP
php7中停止php-fpm服务的方法详解
May 09 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
删除及到期域名的查看(抢域名必备哦)
2008/05/14 PHP
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
php简单的会话类代码
2011/08/08 PHP
PHP编码规范的深入探讨
2013/06/06 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
2019/07/03 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
用脚本调用样式的几种方法
2006/12/09 Javascript
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
深入理解javascript动态插入技术
2013/11/12 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
jQuery展示表格点击变色、全选、删除
2017/01/05 Javascript
JavaScript实现垂直滚动条效果
2017/01/18 Javascript
Vue.extend构造器的详解
2017/07/17 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
uni-app 支持多端第三方地图定位的方法
2020/01/03 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
python更新列表的方法
2015/07/28 Python
python版飞机大战代码分享
2018/11/20 Python
Python中logging实例讲解
2019/01/17 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
2020/05/23 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
网站设计师的岗位职责
2013/11/21 职场文书
银行出纳岗位职责
2013/11/25 职场文书
《我的信念》教学反思
2014/02/15 职场文书
公司证明怎么写
2014/09/22 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
国家助学金感谢信
2015/01/21 职场文书
个人自我鉴定怎么写?
2019/07/01 职场文书