最近两天后端工作比较轻松,空余时间复习复习PHP手册,
就复习下魔术方法跟魔术变量
__FLINE__: 文件中当前的行数;
__FILE__: 文件的完整路径和文件名.如果用在被包含文件中,则返回被包含的文件名.自PHP4.0.2起,__FILE__总是包含一个绝对路径,(如果是符号连接,则是解析后的绝对路径),而在此之前的版本又是会包含一个相对路径;
__DIR__: 文件所在的目录.如果用在被包括的文件中,则返回被包括的文件所在的目录.它等价于(dirname(__FILE__)).除非是根目录,否则目录中名不包括末尾的斜杠.(PHP5.3.0新增)
__FUNCTION__ : 函数名称(PHP 4.3.0 新增). 自PHP5 起 本常量返回该函数被定义时的名字(区别大小写).在PHP4中该值总是小写字母的.[po:我不太懂这个常量有啥用]
__CLASS__: 类的名称(PHP4.3.0新加).自PHP5起本常量返回该类被定义时的名字(区分大小写).在PHP4中该值总是小写字母的.类名包括其呗声明的作用域(例如Foo/Bar).注意自PHP5.4起__CLASS__对trait也起作用.当用在trait方法中时,__CLASS__是调用trait方法的类的名字.
__TRAIT__ :trait的名字(PHP5.4.0新增).自PHP5.4起该常量返回trait被定义时的名字(区分大小写).trait名包括其被声明的作用区域(如Foo\Bar)
__METHOD__:类的方法名(PHP5.0.0新增).返回该方法被定义时的名字(区分大小写).
__NAMESPACE__:当前命名空间的名称(区分大小写).此常量是在编译时定义的(PHP5.3.0新增)
刚好顺便复习一下魔术方法把
1. __construct, __destruct :构造函数,析构函数.
2. __get,__set : __set当给不可访问或不存在的属性赋值时被调用,__get读取不可访问或不存在的属性时被调用
3. __isset,__unset : __isset对不可访问或不存在的属性调用isset()或empty()时被调用,__unset对不可访问或不存在的属性进行unset()时被调用
4. __call,__callStatic :__call调用不可访问或不存在的方法时被调用,__callStatic调用不可访问或不存在的静态方法时被调用
5.__sleep,__wakeup: __sleep当使用serialize时被调用,当你不需要保存大对象的所有数据时很有用,__wakeup当使用unseriiialize时被调用,可用于做些对象的初始化操作
6.__clone :对象clone时被调用,用来调整对象的克隆行为
7.__toString :当一个类被转换成字符串时被调用
8.__invoke :当以函数方式调用对象时被调用
9.__set_state : 当调用var_export()导出类时,此静态方法被调用.用__set_state的返回值作为var_export()的返回值
10.__debuginfo: 当调用var_dump()打印对象时被调用(当你不想打印所有属性)适用于PHP5.6版本
魔术方法 __set
触发时机: 类中声明多个私有属性重新赋值时
作用: 在程序运行过程中未私有的成员属性设置值
参数: @string name 成员属性名@mixed value 成员属性值
返回值:有,数组类型,每个元素都是一个成员属性值
注意事项:如果不在类中添加这个方法而直接为私有属性赋值,会出现”不能访问某个私有属性”的错误
魔术方法 __get
触发时机: 在对象的外部获取私有属性的值时,调用此方法.作用: 通过它可以在对象的外部获取私有成员属性的值
参数: @string name 成员属性名
返回值:有,返回成员属性值
注意事项:如果不在类中添加这个方法而直接为私有属性赋值,会出现”不能访问某个私有属性”的错误
魔术方法 __isset
触发时机: isset()函数在类外部测定对象里面的私有属性时,自动调用
作用: 当在一个未定义的属性上调用isset()函数时调用此方法
参数: @string name 传入对象中的成员属性名作为参数
返回值:有,返回布尔值
魔术方法 __unset
触发时机:使用unset函数删除对象中的成员函数被封装,就需要在类中添加”__unset”方法
作用: 删除对象中的私有成员属性
参数: @string name 传入对象中的成员属性名作为参数
返回值:无
魔术方法__toString()
触发时机: echo 一个对象的时候触发
作用: echo对象的时候返回字符串. 简化操作
参数: 没有
返回值: 必须有,必须是字符串
注意事项: 返回值必须是字符串类型,其他类型不会自动转换
魔术方法__clone()
触发时机:在对象进行clone操作的时候自动触发
作用: clone时修改部分成员属性.
参数:无
返回值:无
注意:clone时使用
clone对象的语法:
变量=clone 对象变量;
魔术方法__call
触发时机:在调用不存在的成员方法时自动触发
作用:1.屏蔽错误,2,自定义方法
参数:2个 1.调用不存在的方法名2.调用时的所有实参组成的数组
返回值:可有可无.
注意事项; 该方法可以用于自定义方法,但是不要全部方法都是用call来定义..
魔术方法__autoload()
触发时机:当实例化对象或者类之间有继承关系,但是当前页面中不存在该类的情况下会自动触发该,魔术方法
作用: 自动加载类
参数: 1个 需要的类名
返回值: 没有
注意事项: 一般仅用于自动加载类.
魔术方法 __sleep
触发时机: 在对象串行化 serialize时自动触发.
作用: 用于设定串行化的成员属性.
参数: 没有
返回值:有,数组类型,每个元素都是一个成员属性名
注意事项:必须返回一个数组类型.
魔术方法__wakeup
触发时机: 在对象进行反串行化的时候自动触发.
作用: 反串行化的时候自动修改成员属性.
参数: 没有
返回值: 不需要返回值
注意事项:注意逻辑问题,一般只对需要反串行化时修改的属性进行设定.