魔术常量:

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

魔术方法:
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()

转载于:https://www.cnblogs.com/hmetoer2017/p/6292865.html

php --魔术常量 /魔术方法相关推荐

  1. PHP的魔术常量魔术方法超全局变量

    1.魔术常量 概念:所谓的魔术常量就是PHP预定义的一些常量,这些常量会随着所在的位置而变化. __LINE__ 获取文件中的当前行号 __FILE__ 获取文件的完整路径和文件名 __DIR__ 获 ...

  2. php超全局变量,魔术常量,魔术方法

    整理了下关于php的基础知识,参考了些资料,如下: 超全局变量 超全局变量 - 超全局变量是在全部作用域中始终可用的内置变量: $GLOBALS $GLOBALS - 引用全局作用域中可用的全部变量 ...

  3. 20150110--魔术方法魔术常量+面向对象-02

    20150110--魔术方法魔术常量+面向对象-02 设计模式 1. 什么是设计模式? 指的是一种已经成熟话的设计规范,通过这种规范,能够达到某种指定的要实现的效果. php中,只有简单的设计模式:单 ...

  4. .魔术方法、魔术常量

    1.__construct() 实例化对象时被调用,当__construct 和以类名为函数名的函数同时存在时,__construct 将 被调用,另一个不被调用. 2.__destruct() 当删 ...

  5. PHP魔术函数与魔术常量

    魔术函数 1.__construct() 实例化对象时被调用,当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用. 2.__destruct() ...

  6. 雷林鹏分享:PHP 魔术常量

    PHP 向它运行的任何脚本提供了大量的预定义常量. 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 有八个魔术常量它们的值随着它们 ...

  7. php中的魔术函数以及魔术常量

    魔术方法: PHP把类中所有以__(两个下划线)开头的方法当成魔术方法,一般建议用户不要将自定义的方法前面加上__作为前缀.魔术方法: 1. __construct() 类的默认构造方法,如果__co ...

  8. PHP中的预定义常量和魔术常量

    魔术常量(8个) 1.__LINE__ 返回文件中的当前行号. 2.__FILE__ 返回文件的完整路径和文件名.如果用在包含文件中,则返回包含文件名.自 PHP 4.0.2 起,__FILE__ 总 ...

  9. PHP5魔术函数与魔术常量

    魔术函数 __construct() 实例化对象时被调用,当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用. __destruct() 当删除一 ...

最新文章

  1. 通俗易懂:图卷积神经网络入门详解
  2. html的input的id,请求[“inputId”]不能在cshtml上工作
  3. redis key存在则删除_Redis加锁的几种实现
  4. Service order save debug for distribution lock set logic
  5. 中缀表达式转换为前缀或后缀表达式的手工做法
  6. python鸡兔同笼编程运行结果_Python少儿编程:鸡兔同笼
  7. 定位到元素后获取其属性_(11)让“盒子”动起来:② “定位”和 BFC | CSS
  8. 数据分析应该要避免的6个错误
  9. linux下shell程序(一)
  10. MongoDB的web可视化管理工具
  11. 拓扑量子计算机有缺点,一个荷兰硕士生的新模型有助于描述量子计算机中的缺陷和错误...
  12. pytest接口自动化测试框架 | 为什么要做pytest插件的二次开发
  13. gst-rtsp-server 开源包的说明
  14. [buuctf.reverse] 131-135
  15. 百度一下,你就知道.2
  16. Canon背后的故事
  17. 【修复版本】SAP PP模块生产版本主数据维护
  18. GeoGebra2笔记:二维或三维画图
  19. python读取excel表格数据
  20. 【Unity】LineRenderer画运动轨迹

热门文章

  1. 如何批量转.jpg/.bmp图片
  2. 卷积神经网络经典模型要点
  3. netflix 数据科学家_数据科学和机器学习在Netflix中的应用
  4. 如何获取并分析Bluetooth HCI层Command Packet和Event Packet包
  5. python项目部署nginx_【python】Django web项目部署(Nginx+uwsgi)
  6. estemplate 导入MySQL_[数据库]es~通过ElasticsearchTemplate进行聚合操作
  7. java编程能做什么_学习Java编程能做什么工作?
  8. OpenVINO——配置与道路分割案例
  9. Ubuntu 15.04 安装 boost-python
  10. ViewPager + TabLayout + Fragment + MediaPlayer的使用