博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
魔术方法、魔术常量
阅读量:4593 次
发布时间:2019-06-09

本文共 1976 字,大约阅读时间需要 6 分钟。

魔术方法:

PHP把类中所有以_ _(两个下划线)开头的方法当成魔术方法,一般建议用户不要将自定义的方法前面加上_ _作为前缀。

 

魔术方法:

1. _ _construct()
类的默认构造方法,如果_ _construct()和与类同名的方法共同出现时,默认调用_ _construct()而不是同类名方法。一般情况下用户自定义构造方法也会使用_ _construct()。
2. _ _destruct()
类的析构函数,当该对象的所有引用都被删除,或者对象被显式销毁时执行。
3. _ _get($name)
可以简单归纳为:用$object->a的方式读取对象的属性时,如果属性a存在且是public型,那么直接返回该属性的值;如果属性a不存在或者是protected/private这样的不可直接访问的类型,就会调用__get($name)方法并以返回值为准。一般可以使用该方法使外部可限制性地访问内部属性,或者完成类似java中的反射操作。
4. _ _set($name, $value)
与_ _get($name)类似,用$object->a = 17的方式给属性赋值时,如果属性a存在且是public型,那么直接给属性a赋值皆可;如果属性a不存在或者是protected/private型,就会调用_ _set($name, $value)方法。
5. _ _call($name, $arguments) / _ _callStatic($name, $arguments)
当调用不存在或者不可访问的方法时,会调用_ _call($name, $arguments)方法。而当在静态方法中调用不存在或者不可访问的方法时,会调用_ _callStatic($name, $arguments)方法。
6. _ _toString()
当打印对象时会被直接调用。如echo $object;
7. _ _clone()
当对象被拷贝时直接调用。如$a = new Action(); $a = $object;
8. _ _isset($name) / _ _unset($name)
对不存在或者不可访问的属性使用isset()或者empty()时,_ _isset()会被调用;当unset一个不存在或者不可访问的属性时,_ _unset()会被调用,否则直接unset该属性皆可。
9. _ _set_state()
用var_export()输出一个对象时,_ _set_state()会被调用,输出内容以该魔术方法的返回值为准。注:var_export()和var_dump()类似,只是var_export()输出的内容符合php语法。注意使用方法:

$test = new Test();

$b = var_export($test, true);
var_dump($b);

class Test {

    public $a;

    public static function __set_state($array) {
        $ab = new Test();
        $ab->a = 10;
        return $ab;
    }
}

10. _ _autoload($name)
实例化一个对象时,如果对应的类不存在,则该方法被调用。注意:该方法是全局函数,参数是类的名称。
11. _ _sleep() / _ _wakup()
略。

 

魔术常量:
1. _ _LINE_ _
返回文件中的当前行号。
2. _ _FILE_ _
返回所在文件的完整路径。包含文件名
3. _ _FUNCTION_ _
返回所在函数名称。
4. _ _CLASS_ _
返回所在类的名称。
5. _ _METHOD_ _
返回所在类方法的名称。需要注意__METHOD__返回的是"class::function"的形式,而__FUNCTION__则返回"function"的形式。

6._ _DIR_ _

返回文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。不包含文件名。(PHP 5.3.0中新增) = 

7._ _NAMESPACE_ _

当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

8._ _TRAIT_ _

Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。

转载于:https://www.cnblogs.com/f158w058/p/6544701.html

你可能感兴趣的文章
Entity Framework:如果允许模型处于非法状态,在某些场景下,记得清空DbContext
查看>>
初次使用Mybatis配置出现错误待解决
查看>>
linux中使用vi 打开文件时,能显示行号
查看>>
java性能调优实战
查看>>
larabel Artisan Command 使用总结
查看>>
mysql中查看一个字段中,有几个逗号
查看>>
C#中的常识
查看>>
安装SQL Server 2012 『企业中文版』
查看>>
win10 上安装虚拟机
查看>>
Mysql 数据迁移后 启动出错
查看>>
HDU 2473 Junk-Mail Filter 删点并查集
查看>>
HDU - 5491 The Next 2015 ACM/ICPC Asia Regional Hefei Online
查看>>
java常用的几种线程池比较
查看>>
psutil安装
查看>>
ES5扩展属性
查看>>
Django 应用开发(3)
查看>>
自己写的java实现的多路搜索树 B-Tree
查看>>
Snow Footprints CodeForces - 298A
查看>>
Choose and divide UVA - 10375
查看>>
Delete Them
查看>>