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 相关文章推荐
BBS(php & mysql)完整版(五)
Oct 09 PHP
常用的php对象类型判断
Aug 27 PHP
php字符串替换函数substr_replace()用法实例
Mar 17 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
Jan 12 PHP
PHP二维数组排序简单实现方法
Feb 14 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
Jul 01 PHP
Yii2.0预定义的别名功能小结
Jul 04 PHP
微信红包随机生成算法php版
Jul 21 PHP
php+Memcached实现简单留言板功能示例
Feb 15 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
Apr 19 PHP
使用 laravel sms 构建短信验证码发送校验功能
Nov 06 PHP
PHP基于回溯算法解决n皇后问题的方法示例
Nov 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/04/09 PHP
php实现登陆模块功能示例
2016/10/20 PHP
php实现页面纯静态的实例代码
2017/06/21 PHP
php/JS实现的生成随机密码(验证码)功能示例
2019/06/06 PHP
js arguments.callee的应用代码
2009/05/07 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
2017/01/18 Javascript
Angular.js通过自定义指令directive实现滑块滑动效果
2017/10/13 Javascript
解决vue+webpack打包路径的问题
2018/03/06 Javascript
JS实现Cookie读、写、删除操作工具类示例
2018/08/28 Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
2018/09/14 Javascript
Vue实现简单分页器
2018/12/29 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
python安装教程
2018/02/28 Python
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
使用Scrapy爬取动态数据
2018/10/21 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
Python time库基本使用方法分析
2019/12/13 Python
浅析Django中关于session的使用
2019/12/30 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
基于Python爬取搜狐证券股票过程解析
2020/11/18 Python
如何用Python徒手写线性回归
2021/01/25 Python
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
Java文件和目录(IO)操作
2014/08/26 面试题
退休感言
2014/01/28 职场文书
《月迹》教学反思
2014/02/19 职场文书
大一学生个人总结
2015/02/15 职场文书
2015年音乐教师个人工作总结
2015/05/20 职场文书
党员转正大会主持词
2015/07/02 职场文书
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL