zoukankan      html  css  js  c++  java
  • 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__

    返回文件中的当前行号。

    <span style="font-size:18px;"><?php
    echo "这是第 ". __LINE__ ."";
    echo "<br/>";
    ?></span>



    2. __FILE__

    返回所在文件的完整路径。包含文件名

    <span style="font-size:18px;"><?php
    echo "该文件的绝对路径: ". __FILE__;
    echo "<br/>";
    ?></span>



    3. __FUNCTION__

    返回所在函数名称。

    <span style="font-size:18px;"><?php
    function Test() {
    echo  "该函数名为:". __FUNCTION__ ;
    echo "<br/>";
    }
    Test();
    ?></span>



    4. __CLASS__

    返回所在类的名称。

    <span style="font-size:18px;"><?php
    class test {
    function show() {
    echo "该类名为:". __CLASS__ . "<br>";
    echo "该函数名为:". __FUNCTION__ ;
    echo "<br/>";
    }
    }
    $t = new test();
    $t->show();
    ?></span>



    5. __METHOD__

    返回所在类方法的名称。需要注意__METHOD__返回的是"class::function"的形式,而__FUNCTION__则返回"function"的形式。

    6.__DIR__

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

    <span style="font-size:18px;"><?php
    echo "该文件位于 ". __DIR__ ."文件夹下";
    echo "<br/>";
    ?></span>

    7.__NAMESPACE__

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

    8.__TRAIT__

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

  • 相关阅读:
    filter in the new axis?
    项目 ".wdproj "所需的应用程序未安装。确保已安装项目类型(.wdproj)的应用程序
    firefox的webmail notifier网易邮箱设置
    phpmyadmin导出数据中文乱码问题解决
    Eclipse快捷键大全(转载)
    Android Error: Unable to open class file R.java
    将 SQL Server Express 版用于 ASP.NET (Visual Studio)
    MySql常用命令
    Godaddy Google Adwords 促销代码使用
    HTTP 错误 500.22 Internal Server Error—IIS7 Asp.net2.0 网站运行失败解决办法
  • 原文地址:https://www.cnblogs.com/Im-Victor/p/9447780.html
Copyright © 2011-2022 走看看