小编给大家分享一下PHP魔术常量,魔术函数,预定义常量是什么,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!
<强>一、魔术常量强>
<强> 1,强> <强> __construct() 强>
实例化对象时被调用,当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。
<强> 2,__destruct() 强>
当删除一个对象或对象操作终止时被调用
<强> 3,__call() 强>
对象调用某个方法,若方法存在,则直接调用;若不存在,则会去调用__call函数
<强> 4,__get() 强>
读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用__get函数。
<强> 5,__set() 强>
设置一个对象的属性时,若属性存在,则直接赋值;若不存在,则会调用__set函数。
<强> 6,__toString() 强>
打印一个对象的时候被调用。如echo $ obj;或打印obj美元;
<强> 7,__clone() 强>
克隆对象时被调用。如:$ t=新的测试();t1=克隆t美元;
<强> 8日__sleep() 强>
序列化之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。
<强> 9日__wakeup() 强>
非系列化时被调用,做些对象的初始化工作。
<强> 10,__isset() 强>
检测一个对象的属性是否存在时被调用。如:收取($ c→名称)。
<强> 11、__unset() 强>
设置一个对象的属性时被调用。如:设置($ c→名称)。
<强> 12日__set_state() 强>
调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。
<强> 13日__autoload() 强>
实例化一个对象时,如果对应的类不存在,则该方法被调用。
<强>举例说明:强>
1, <代码> __get() 代码>当试图读取一个并不存在的属性的时候被调用。
如果试图读取一个对象并不存在的属性的时候,PHP就会给出错误信息。如果在类里添加__get方法,并且我们可以用这个函数实现类似java中反射的各种操作。
类测试 { 公共函数__get(键) { echo $关键。“;不存在“; } } $ t=新的测试(); echo $ t→名称; 输出:名字不存在
2, <代码> __set() 代码>当试图向一个并不存在的属性写入值的时候被调用。
类测试 { 公共函数__set(键,美元价值) { 回声& # 39;对& # 39;。美元的关键。“附值“。美元价值; } } $ t=新的测试(); $ t→name=癮ninggo"; 输出:对名称赋值aninggo
3 <代码> __call() 代码>当试图调用一个对象并不存在的方法时,调用该方法。
类测试 { 公共函数__call(键,Args)美元 { 回声“您要调用的{$关键}方法不存在。你传入的参数是:“。print_r (Args美元,真实); } } $ t=新的测试(); $ t→getName(一个,去); 程序将会输出: 您要调用的getName方法不存在。参数是:数组 ( [0]=比;一个 [1]=比;去 )
4, <代码> __toString() 代码>当打印一个对象的时候被调用,这个方法类似于java的toString方法,当我们直接打印对象的时候回调用这个函数。
类测试 { 公共函数__toString () { 返回“打印Test"; } } $ t=新的测试(); echo $ t;
运行echo $ t;的时候,就会调用$ t→__toString();从而程序将会输出:打印测试;
, <代码> __clone() 代码>当对象被克隆时,被调用。
类测试 { 公共函数__clone () { 回应“我被复制了!“; } } $ t=新的测试(); t1=克隆t美元; 程序输出:我被复制了!
<强>二,魔术常量强>
1, <代码> __LINE__ 代码>
返回文件中的当前行号。
2, <代码> __FILE__ 代码>
返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自PHP 4.0.2起,__FILE__总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。
3 <代码> __DIR__ 代码>
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于目录名(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)
, <代码> __FUNCTION__