`
kaozjlin
  • 浏览: 115320 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

php魔术方法和魔术变量

    博客分类:
  • php
PHP 
阅读更多

PHP把所有以__(两个下划线)开头的类方法当成魔术方法。所以你定义自己的类方法时,不要以 __为前缀。

 

1__construct()

当实例化一个对象的时候,这个对象的构造方法将首先被调用;

我们知道php5对象模型和类名相同的函数是类的构造函数,那么如果同时定义构造函数和__construc()方法的话,php5会默认调用__contruct()而不会调用同类名函数,所以__contruct()作为类的默认构造函数;

 

2__destruct()

析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。

 

3__get(string $name)

当试图读取一个并不存在的属性时被调用;如果试图读取一个对象并不存在的属性的时候,php就会给出错误的信息。如果在类里添加__get方法,并且我们可以用这个函数实现类似java中的反射的各种操作。

 

4__set(string $name, mixed $value)

给未定义的变量赋值时将被调用

 

5__call(string $name, array $arguments)

当调用一个不可访问方法(如未定义,或者不可见)时,__call() 会被调用。

__callStatic(string $name, array $arguments)

当在静态方法中调用一个不可访问方法(如未定义,或者不可见)时,__callStatic() 会被调用。

 

6__toString()

当打印一个对象的时候被调用,这个方法类似于javatoString方法,当我们直接打印对象的时候回调这个函数。

 

7__clone()

当对象被克隆时调用。

 

8__sleep()

serialize()函数会检查是否存在一个魔术方法 __sleep.如果存在,__sleep()方法会先被调用, 然后才执行序列化操作。这个功能可以用于清理对象,并返回一个包含对象中所有变量名称的数组。如果该方法不返回任何内容,则NULL被序列化,导致 一个E_NOTICE错误。__sleep方法常用于提交未提交的数据,或类似的操作。同时,如果你有一些很大的对象,不需要保存,这个功能就很好用。

 

9__wakeup()

__sleep() 相反,unserialize()会检查是否存在一个__wakeup方法。如果存在,则会先调用 __wakeup方法,预先准备对象数据。 __wakeup经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。


10__isset()

当对未定义的变量调用isset() empty()时,__isset() 会被调用。

 

11__unset()

unset一个对象的属性时被调用。如:unset($c->name)

 

12__set_state()

调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。

 

13__autoload()

实例化一个对象时,如果对应的类不存在,则该方法被调用。简单的说就是类的自动加载;当你尝试使用一个PHP没有组织到的类, 它会寻找一个__autoload的全局函数. 如果存在这个函数,PHP会用一个参数来调用它,参数即类的名称。

 

14__invoke()

当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。

 

魔术常量:

__LINE__ 文件中的当前行号。 

__FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。 

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

__FUNCTION__ 函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。 

__CLASS__ 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。 

__METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。 

__NAMESPACE__ 当前命名空间的名称(大小写敏感)。这个常量是在编译时定义的(PHP 5.3.0 新增) 

分享到:
评论

相关推荐

    PHP 魔术变量和魔术函数详解_.docx

    PHP 魔术变量和魔术函数详解_.docx

    php魔术方法与魔术变量、内置方法与内置变量的深入分析

    本篇文章是对php魔术方法与魔术变量、内置方法与内置变量进行了详细的分析介绍,需要的朋友参考下

    PHP 预定义变量、魔术常量和魔术方法功能与用法小结

    本文总结了PHP 预定义变量、魔术常量和魔术方法。分享给大家供大家参考,具体如下: PHP 预定义了一些变量、常量、方法,使用起来很方便,例如直接使用 __DIR__ 获取当前文件所在的目录。 下面分别详细介绍一下 PHP...

    PHP 魔术变量和魔术函数详解

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

    php魔术变量用法实例详解

    本文实例讲述了php魔术变量用法,其中__DIR__是php5.3新增的,分享给大家供大家参考。具体用法分析如下: 系统常量 __FILE__ 当前文件名 __LINE__ 当前行数 __FUNCTION__ 当前函数名 __CLASS__ 当前类名 __METHOD__ ...

    PHP中魔术变量__METHOD__与__FUNCTION__的区别

    本文实例讲述了PHP中魔术变量__METHOD__与__FUNCTION__的区别,分享给大家供大家参考。具体分析如下: __METHOD__类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。 __FUNCTION__函数名称...

    PHP之十六个魔术方法详细介绍

    PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用。 魔术方法包括: __construct(),类的构造函数 __destruct(),类的析构函数 __call(),在对象中调用一个不...

    详解php魔术方法(Magic methods)的使用方法

    PHP中把以两个下划线__开头的方法称为魔术方法,这些方法在PHP中充当了举足轻重的作用。 魔术方法包括: __construct(),类的构造函数 __destruct(),类的析构函数 __call(),在对象中调用一个不可访问方法时调用...

    PHP中常用的魔术方法

    我们在PHP中经常用到魔术方法,像构造方法,析构方法等等魔术变量,下面总结一下一些常用的魔术变量: __construct(),__destruct(),__clone(),__autoload(),__tostring(),__invoke(),__set(),__get(),__unset(),__is...

    php 高级应用 程序漏洞

    php高级应用 程序漏洞 l 高级PHP应用程序漏洞审核技术 ¡ 前言 ¡ 传统的代码审计技术 ¡ PHP版本与应用代码审计 ¡ 其他的因素与应用代码审计 ¡ 扩展我们的字典 ...n 变量key与魔术引号 n PHP中可能导

    PHP的魔术常量__METHOD__简介

    __METHOD__ 是PHP5之后新增的魔术常量,表示的是类文法的名称。魔术常量是一种PHP预定义常量,它的值可以是变化的,PHP中的其它已经存在的魔术常量有__LINE__、__FILE__、__FUNCTION__、__CLASS__等。 下面就用一小...

    高级PHP应用程序漏洞审核技术

    5.3.6 变量key与魔术引号 5.4 代码注射 5.4.1 PHP中可能导致代码注射的函数 5.4.2 变量函数与双引号 5.5 PHP自身函数漏洞及缺陷 5.5.1 PHP函数的溢出漏洞 5.5.2 PHP函数的其他漏洞 5.5.3 session_destroy()删除文件...

    PHP官方正版中文帮助手册

     与变量和类型有关的扩展  Web Services  Windows 平台下的扩展  XML 操作  PHP 核心:Zend 引擎的骇客指南 序言  "counter" 扩展 - 一个连续的实例  PHP 5 构建系统  扩展的结构  内存管理  变量的使用...

    PHP中几个常用的魔术常量

    有七个魔术常量它们的值随着它们在代码中的位置改变而改变。例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写,如下: 名称 说明 __LINE__ 文件中的当前行号。 __FILE__ 文件...

    PHP5与MySQL5从入门到精通.rar

    2.4.2 魔术常量 2.5 表达式 2.6 运算符 2.6.1 算术运算符 2.6.2 字符串运算符 2.6.3 比较运算符 2.6.4 逻辑运算符 2.6.5 位运算符 2.6.6 赋值运算符 2.6.7 数组运算符 2.6.8 类型运算符 2.6.9 错误控制...

Global site tag (gtag.js) - Google Analytics