几个 PHP 的"魔术常量","魔术方法"-----PHP手册阅读笔记

本文详细介绍了PHP中的魔术方法和魔术变量,包括它们的触发时机、作用、参数及返回值等内容。此外还列举了多种魔术方法的具体应用场景,帮助读者更好地理解和掌握PHP的高级特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近两天后端工作比较轻松,空余时间复习复习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

触发时机: 在对象进行反串行化的时候自动触发.

作用: 反串行化的时候自动修改成员属性.

参数: 没有

返回值: 不需要返回值

注意事项:注意逻辑问题,一般只对需要反串行化时修改的属性进行设定.

 

转载于:https://www.cnblogs.com/zeoblog/p/6559160.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值