php中的常用魔术方法总结


Posted in PHP onAugust 02, 2013

常用的魔术方法有:__Tostring ()  __Call()  __autoLoad()  __ clone()  __GET()   __SET()    __isset()  __unset()
 
1.__Tostring()   用于定义输出对象引用时调用  常用于打印一些对象的信息 必须有返回值
eg:有一个persion类
Persion per =new persion()
Echo per;    //直接调用会出错
我们可以在类的定义中添加__tostring()方法

Function  __Tostring()
{
$str=this->$name.this->age;
Return $str;
}

2.__clone()对象的复制
引用赋值
$per1=$per2; 而这在内存中只有一块地址
而$per1=clone $per2   这时有两块内存地址

3.__call()方法 当调用类实例中不存在的函数时自动执行
如果试图调用类中不存在的函数,会出现语法错误,为了能够友好的提示
我们可以在类中声明Call()方法;

Function __call($funName,$argu)
{
Echo "名为".$funName."参数为".printf($argh)."的函数不存在",
}

4.__autoLoad 自动加载使用的类文件  该函数是在引用的页面添加
我们都使用过这样情况,在页面中需要调用其他php文件,我们需要使用include方法
但是如果有几十个页面需要引用,未免太过繁琐,我们可以在该页面中使用autoload方法
Function __autoload($className)
{
Include $className.".php";
}

这样凡是引用到其他类的地方,都会自动引用该类文件  前提类文件的名称必须是   类名.php

5.__GET()   访问类中私有属性
如果类中的属性设置为私有属性,在类的实例中是无法访问的,但怎样才能访问呢?
我们就可以使用__GET()
Eg :
类中有

Class person
{
Private $name;
Private $age;
}

实例化 person per=new person()
Per->$name; //这样是取不到值的
但是如果我们在类中增加__GET方法
Function __GET($proName)
{
Return this->$proName;
}

我们再次调用Per->$name 就可以访问了
这样做有人会提出疑问了,这样可以直接访问私有变量,和声明成公有的有什么区别呢?
如果声明成公有的,我们可以任意读取,如果是私有,如果我们增加了get方法,那么每次调用私有属性都会调用GET方法的内容,这样我们就可以在get方法中增加一些逻辑处理。

6.__SET()设置类中的私有属性
原理同上,我们可以再类中添加__SET()函数,每当通过调用类实例给私有属性赋值,都会执行__SET函数 ,函数原型:

Function __SET($proName,$value)
{
This->$proName=$value;
}

既然是方法赋值,我们就可以做一些逻辑处理

7.__isset() 判断类中私有属性或方法是否存在时自动调用
首先我们先介绍一下isset 方法,该方法用于判定属性和方法是否存在,但是我们无法通过类类实例判断类中的某个私有属性是否存在
如果我们使用isset(per->$name);//返回值是false,但是$name属性的确存在,怎么解决呢?
解决方法:
1.将$name定义为私有属性
2.在类定义中添加

Function __isset($proName)
{
Return  isset(this->$proName);//再类内部是可以访问私有属性的
}

这样的话我们再次调用isset($name);返回值就为true了;

8.__unset()清除类中私有变量时自动调用
与之结合的是unset() unset方法可以删除属性,当我们需要删除类中属性的时候,如果是公有属性我们可以直接
删除,但是如果是私有我们只通过该方法就无法实现了
怎样实现呢我们可以使用__unset()方法实现该功能我们需要在类中添加

Function __unset($proName)
{
Unset(this->$proName);
}

现在我们再调用unset($name);就可以删除person类中的私有属性$name了
PHP 相关文章推荐
PHP实现文件安全下载
Oct 09 PHP
Discuz! Passport 通行证整合
Mar 27 PHP
PHP初学者常见问题集合 修正版(21问答)
Mar 23 PHP
php中如何同时使用session和cookie来保存用户登录信息
Jul 05 PHP
php strnatcmp()函数的用法总结
Nov 27 PHP
php实现ip白名单黑名单功能
Mar 12 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
php实现简单加入购物车功能
Mar 07 PHP
php对xml文件的增删改查操作实现方法分析
May 19 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
php中yii框架实例用法
Dec 22 PHP
深入解析Session是否必须依赖Cookie
Aug 02 #PHP
php中用date函数获取当前时间有误的解决办法
Aug 02 #PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
Aug 01 #PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
Aug 01 #PHP
PHP5中GD库生成图形验证码(有汉字)
Jul 28 #PHP
通过table标签,PHP输出EXCEL的实现方法
Jul 24 #PHP
Ajax+PHP快速上手及简单应用说明
Jul 24 #PHP
You might like
php xml实例 留言本
2009/03/20 PHP
php数字转汉字代码(算法)
2011/10/08 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
2014/11/19 PHP
推荐十款免费 WordPress 插件
2015/03/24 PHP
浅析iis7.5安装配置php环境
2015/05/10 PHP
PHP编辑器PhpStrom运行缓慢问题
2017/02/21 PHP
javascript各种复制代码收集
2008/09/20 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
2014/05/05 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
浏览器兼容的JS写法总结
2016/04/27 Javascript
javascript添加前置0(补零)的几种方法
2017/01/05 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
微信小程序form表单组件示例代码
2018/07/15 Javascript
vuejs router history 配置到iis的方法
2018/09/20 Javascript
微信小程序API—获取定位的详解
2019/04/30 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
2017/09/26 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
python队列queue模块详解
2018/04/27 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
Python Unittest原理及基本使用方法
2020/11/06 Python
用python批量下载apk
2020/12/29 Python
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
毕业生写求职信的要点
2014/03/04 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
主持稿开场白
2015/06/01 职场文书
理解深度学习之深度学习简介
2021/04/14 Python
python的html标准库
2022/04/29 Python
table设置超出部分隐藏,鼠标移上去显示全部内容的方法
2022/12/24 HTML / CSS