zoukankan      html  css  js  c++  java
  • PHP基础之魔术方法

    对象析构、解构

    public void  __construct ()
    public void  __destruct ()
    
    • __construct() 在每次创建新对象时先调用此方法
    • __destruct() 对象的所有引用都被删除或者当对象被显式销毁时执行

    属性重载

    public void  __set ( string $name , mixed $value )
    public mixed __get ( string $name )
    public bool  __isset ( string $name )
    public void  __unset ( string $name )
    
    • 在给不可访问属性赋值时,__set() 会被调用。
    • 读取不可访问属性的值时,__get() 会被调用。
    • 当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。
    • 当对不可访问属性调用 unset() 时,__unset() 会被调用。

    属性重载只能在对象中进行。在静态方法中,这些魔术方法将不会被调用。所以这些方法都不能被 声明为 static。从 PHP 5.3.0 起, 将这些魔术方法定义为 static 会产生一个警告。

    方法重载

    public mixed __call ( string $name , array $arguments )
    public static mixed __callStatic ( string $name , array $arguments )
    
    • 在对象中调用一个不可访问方法时,__call() 会被调用。
    • 在静态上下文中调用一个不可访问方法时,__callStatic() 会被调用。

    对象序列化

    public array __sleep ( void )
    public void __wakeup ( void )
    
    • serialize() 函数会检查类中是否存在一个魔术方法 __sleep()。如果存在,该方法会先被调用,然后才执行序列化操作。此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。
    • unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。

    对象字符串化

    public string __toString ( void )
    
    • __toString() 方法用于一个类被当成字符串时应怎样回应。例如 echo $obj; 应该显示些什么。此方法必须返回一个字符串

    不能在 __toString() 方法中抛出异常。这么做会导致致命错误。

    对象调用函数化

    mixed __invoke ([ $... ] )
    
    • 当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。

    导出类

    static object __set_state ( array $properties )
    public array __debugInfo ( void )
    
    • 自 PHP 5.1.0 起当调用 var_export() 导出类时,__set_state() 静态 方法会被调用
    • 当调用var_dump() 打印类时, 如果定义了 __debugInfo() 方法, 则只会打印该方法返回值,否则打印全部成员

    作者:T&D
    Q Q:335749143
    邮箱:tanda.arch#gmail.com(@替换#)
    出处:http://www.cnblogs.com/one-villager/
    * 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    导出 IIS 站点及配置
    redis
    mongo常用
    mongo分片集群
    mysql常用
    elk安装
    Oracle数据库迁移文档
    笔记
    ping 。sh
    光衰报警
  • 原文地址:https://www.cnblogs.com/one-villager/p/7606736.html
Copyright © 2011-2022 走看看