• php 魔术方法 和 魔术常量


    魔术方法:
     
    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 名包括其被声明的作用区域(例如 FooBar)。
     
  • 相关阅读:
    cf1100 F. Ivan and Burgers
    cf 1033 D. Divisors
    LeetCode 17. 电话号码的字母组合
    LeetCode 491. 递增的子序列
    LeetCode 459.重复的子字符串
    LeetCode 504. 七进制数
    LeetCode 3.无重复字符的最长子串
    LeetCode 16.06. 最小差
    LeetCode 77. 组合
    LeetCode 611. 有效三角形个数
  • 原文地址:https://www.cnblogs.com/shenmiyang/p/12517300.html
Copyright © 2020-2023  润新知