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 fread()使用技巧
Jan 22 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
Aug 03 PHP
PHP自定义大小验证码的方法详解
Jun 07 PHP
php广告加载类用法实例
Sep 23 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
Mar 24 PHP
PHP中判断文件存在使用is_file还是file_exists?
Apr 03 PHP
PHP中的常见魔术方法功能作用及用法实例
Jul 01 PHP
深入理解PHP之OpCode原理详解
Jun 01 PHP
PHP判断数组是否为空的常用方法(五种方法)
Feb 08 PHP
php 使用curl模拟ip和来源进行访问的实现方法
May 02 PHP
php项目中类的自动加载实例讲解
Sep 12 PHP
通过代码实例解析PHP session工作原理
Dec 11 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设计模式 Visitor 访问者模式
2011/06/28 PHP
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
php随机获取金山词霸每日一句的方法
2015/07/09 PHP
JS字符串处理实例代码
2013/08/05 Javascript
NodeJS的url截取模块url-extract的使用实例
2013/11/18 NodeJs
Javascript四舍五入Math.round()与Math.pow()使用介绍
2013/12/27 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
2015/06/19 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
微信小程序实现页面跳转传值以及获取值的方法分析
2017/12/18 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
微信小程序中button去除默认的边框实例代码
2019/08/01 Javascript
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
Python进行数据提取的方法总结
2016/08/22 Python
Apache如何部署django项目
2017/05/21 Python
Pytorch入门之mnist分类实例
2018/04/14 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
python 求1-100之间的奇数或者偶数之和的实例
2019/06/11 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
浅谈keras中的目标函数和优化函数MSE用法
2020/06/10 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
新闻专业应届生求职信
2013/10/31 职场文书
旅游市场营销方案
2014/03/09 职场文书
三年级班级文化建设方案
2014/05/04 职场文书
竞选大队干部演讲稿
2014/09/11 职场文书
学校标语口号大全
2015/12/26 职场文书
Netty分布式客户端接入流程初始化源码分析
2022/03/25 Java/Android
Kubernetes部署实例并配置Deployment、网络映射、副本集
2022/04/01 Servers
vue elementUI批量上传文件
2022/04/26 Vue.js