PHP程序中各种魔术方法的使用
2015-11-12 18:17
429 查看
魔术方法是PHP语言中特有的方法,使用魔术方法能够大大简化程序,提高程序的运行效率。
魔术方法的共性:
1,自动调用,只是不同的魔术方法,调用的时机不同。
2,都是以“__”开始的方法
3,所有的魔术方法,方法名都是固定的,自己不能新建魔术方法
4,如果在程序用不写魔术方法,就不存在
几种常用的魔术方法:
1,__construct() 在创建对象后第一个调用的方法
2,__destruct() 在释放对象前最后一个调用的方法
3,__set() 为私有属性赋值的时候自动调用的方法
4,__get() 获取私有属性值得时候自动调用的方法
5,__isset() 在使用isset()判断一个私有属性是否存在时自动调用的方法
6,__unset() 在使用unset()删除一个私有属性时自动调用的方法
7,__toString()
在使用echo $p;($p是一个对象)等输出一个对象的时候自动调用的方法
8,__clone()
是在克隆对象时,自动调用的方法。使用clone关键字复制一个对象,这样比直接赋值多了一个对象
9,__call() 在调用一个对象中不存在的方法时自动调用的方法
10,__sleep() 在使用serialize()函数串行化的时候自动调用的魔术方法
11,__wakeup() 在使用unserialize()函数反串行化的时候自动调用的魔术方法
12,__set_state() 在使用var_export()函数导出类的基本信息的时候自动调用的魔术方法
13,__autoload() 只要在这个脚本中,需要加载类的时候,就会自动调用这个方法。唯一一个写在类外面的魔术方法。
魔术方法的使用:
3,__set()
(1)在直接设置私有属性值时,自动调用的
(2)__set()可以接受两个个参数,第一个参数为直接访问私有属性的属性名称,第二个参数为需要设置的值
(3)在外面用->的方式来访问
4,__get()
(1)在直接访问私有属性值时,自动调用的
(2)__get()可以接受一个参数,参数为直接访问私有属性时的属性名称
(3)在外面用->的方式来访问
5,__isset()
(1)如果对象的属性不是私有的,可以用isset()来判断对象中的属性是否存在,但私有的不行
(2)在对象外面使用isset()方法判断私有属性是否存在时,自动调用
(3)__isset()接受一个参数,参数为判断的私有属性的名称
6,__unset()
(1)如果对象的属性不是私有的,可以用unset()来删除对象中的属性,但私有的不行
(2)在对象外面使用__unset()方法判断私有属性是否存在时,自动调用
(3)__unset()接受一个参数,参数为删除的私有属性的名称
7,__toString()
(1)是在直接使用echo printf print等输出一个对象引用时,自动调用这个方法
(2)将对象的基本信息放在__toString()方法内部,形成自字符串返回
(3)__toString()方法中,不能有参数,而且必须返回一个字符串
8,__clone()
(1)如果$p是一个对象,使用$p2=$p赋值后,这样并不是两个对象,只是一个对象的两个引用
(2)如果使用$p2= clone $p,这样就存在两个对象,可以单独操作
(3)作用和构造方法一样,是对新克隆的对象进行初始化
(4)在这个方法中$this代表的是副本,所有就可以给所有的副本成员初始化
9,__call()
(1)在调用一个对象中不存在的方法时自动调用的方法
(2)__call()可以接受两个个参数,第一个参数为调用的不存在方法的方法名,第二个参数为调用这个不存在方法的方法参数(当输入有多个参数,那就是一个数组)
(3)可以新建一个数组,里面存放多个函数名(功能相识,但方法名不同),用in_array()函数来同一处理,这样可以减少内存的使用
10,__sleep()
(1)在使用serialize()函数串行化的时候自动调用__sleep()魔术方法。
(2)作用:可以设置需要串行化的对象的属性,如果没有这个魔术方法,就将所有的属性都串行化
(3)使用:只要在这个方法中,返回一个数组,在数组中声明了哪个属性名,那个属性就被串行化;没有在这个数组中的就不被串行化。对象中的方法还是会串行化的
11,__wakeup()
(1)在使用unserialize()函数反串行化的时候自动调用__wakeup()魔术方法
(2)作用:对串行化回来的对象经行初始化,和__construst()和__clone()功能类似
(3)使用:在方法内可以修改属性的值
13,__autoload()
(1)__autoload()接受一个参数,为需要调用的类名
(2)在__autoload()函数里面填写类加载include过程
(3)这样要求我们在新建类和类所在文件的文件名有一定的规律,才能统一处理
(4)同一个类只会加载一次,不会重复调用
魔术方法的共性:
1,自动调用,只是不同的魔术方法,调用的时机不同。
2,都是以“__”开始的方法
3,所有的魔术方法,方法名都是固定的,自己不能新建魔术方法
4,如果在程序用不写魔术方法,就不存在
几种常用的魔术方法:
1,__construct() 在创建对象后第一个调用的方法
2,__destruct() 在释放对象前最后一个调用的方法
3,__set() 为私有属性赋值的时候自动调用的方法
4,__get() 获取私有属性值得时候自动调用的方法
5,__isset() 在使用isset()判断一个私有属性是否存在时自动调用的方法
6,__unset() 在使用unset()删除一个私有属性时自动调用的方法
7,__toString()
在使用echo $p;($p是一个对象)等输出一个对象的时候自动调用的方法
8,__clone()
是在克隆对象时,自动调用的方法。使用clone关键字复制一个对象,这样比直接赋值多了一个对象
9,__call() 在调用一个对象中不存在的方法时自动调用的方法
10,__sleep() 在使用serialize()函数串行化的时候自动调用的魔术方法
11,__wakeup() 在使用unserialize()函数反串行化的时候自动调用的魔术方法
12,__set_state() 在使用var_export()函数导出类的基本信息的时候自动调用的魔术方法
13,__autoload() 只要在这个脚本中,需要加载类的时候,就会自动调用这个方法。唯一一个写在类外面的魔术方法。
魔术方法的使用:
3,__set()
(1)在直接设置私有属性值时,自动调用的
(2)__set()可以接受两个个参数,第一个参数为直接访问私有属性的属性名称,第二个参数为需要设置的值
(3)在外面用->的方式来访问
4,__get()
(1)在直接访问私有属性值时,自动调用的
(2)__get()可以接受一个参数,参数为直接访问私有属性时的属性名称
(3)在外面用->的方式来访问
5,__isset()
(1)如果对象的属性不是私有的,可以用isset()来判断对象中的属性是否存在,但私有的不行
(2)在对象外面使用isset()方法判断私有属性是否存在时,自动调用
(3)__isset()接受一个参数,参数为判断的私有属性的名称
6,__unset()
(1)如果对象的属性不是私有的,可以用unset()来删除对象中的属性,但私有的不行
(2)在对象外面使用__unset()方法判断私有属性是否存在时,自动调用
(3)__unset()接受一个参数,参数为删除的私有属性的名称
7,__toString()
(1)是在直接使用echo printf print等输出一个对象引用时,自动调用这个方法
(2)将对象的基本信息放在__toString()方法内部,形成自字符串返回
(3)__toString()方法中,不能有参数,而且必须返回一个字符串
8,__clone()
(1)如果$p是一个对象,使用$p2=$p赋值后,这样并不是两个对象,只是一个对象的两个引用
(2)如果使用$p2= clone $p,这样就存在两个对象,可以单独操作
(3)作用和构造方法一样,是对新克隆的对象进行初始化
(4)在这个方法中$this代表的是副本,所有就可以给所有的副本成员初始化
9,__call()
(1)在调用一个对象中不存在的方法时自动调用的方法
(2)__call()可以接受两个个参数,第一个参数为调用的不存在方法的方法名,第二个参数为调用这个不存在方法的方法参数(当输入有多个参数,那就是一个数组)
(3)可以新建一个数组,里面存放多个函数名(功能相识,但方法名不同),用in_array()函数来同一处理,这样可以减少内存的使用
10,__sleep()
(1)在使用serialize()函数串行化的时候自动调用__sleep()魔术方法。
(2)作用:可以设置需要串行化的对象的属性,如果没有这个魔术方法,就将所有的属性都串行化
(3)使用:只要在这个方法中,返回一个数组,在数组中声明了哪个属性名,那个属性就被串行化;没有在这个数组中的就不被串行化。对象中的方法还是会串行化的
11,__wakeup()
(1)在使用unserialize()函数反串行化的时候自动调用__wakeup()魔术方法
(2)作用:对串行化回来的对象经行初始化,和__construst()和__clone()功能类似
(3)使用:在方法内可以修改属性的值
13,__autoload()
(1)__autoload()接受一个参数,为需要调用的类名
(2)在__autoload()函数里面填写类加载include过程
(3)这样要求我们在新建类和类所在文件的文件名有一定的规律,才能统一处理
(4)同一个类只会加载一次,不会重复调用
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项
- ASP.NET、ASP、PHP、JSP之间有什么区别?
- PHP VBS JS 函数 对照表
- C语言实现的统计php代码行数功能源码(支持文件夹、多目录)
- php xml 入门学习资料