• 技术文章 >后端开发 >PHP问题

    php魔术方法的认识

    藏色散人藏色散人2020-09-12 11:06:47原创1959

    在php中将所有以“__”即两个下划线开头的类方法保留为魔术方法,PHP中魔术方法有“__construct()”、“__destruct()”、“__call()”、“__callStatic()”、“__get()”等等。

    推荐:《PHP视频教程

    魔术方法

    __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等方法在 PHP 中被称为魔术方法(Magic methods)。在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能。

    Caution

    PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法。所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀。

    __sleep() 和 __wakeup()

    public __sleep ( void ) : array

    __wakeup ( void ) : void

    serialize() 函数会检查类中是否存在一个魔术方法 __sleep()。如果存在,该方法会先被调用,然后才执行序列化操作。此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法未返回任何内容,则 NULL 被序列化,并产生一个 E_NOTICE 级别的错误。

    Note:

    __sleep() 不能返回父类的私有成员的名字。这样做会产生一个 E_NOTICE 级别的错误。可以用 Serializable 接口来替代。

    __sleep() 方法常用于提交未提交的数据,或类似的清理操作。同时,如果有一些很大的对象,但不需要全部保存,这个功能就很好用。

    与之相反,unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。

    __wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。

    以上就是php魔术方法的认识的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php
    上一篇:php签到功能的实现 下一篇:php如何替换所有符合条件的字符串
    大前端线上培训班

    相关文章推荐

    • PHP面向对象之魔术方法(__tostring,__invoke)详解• PHP魔术方法之__call和__callStatic详解(代码实例)• PHP魔术方法之__get,__set详解(代码实例)• PHP魔术方法之__iset,__unset详解(代码实例)• PHP魔术方法之__clone详解(代码实例)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网