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


Posted in PHP onJune 03, 2013

php内置变量了:DIRECTORY_SEPARATOR
DIRECTORY_SEPARATOR是一个返回跟操作系统相关的路径分隔符的php内置命令,在windows上返回/,而在linux或者类unix上反悔/,就是这么个区别,通常在定义包含文件路径或者上传保存目录的时候会用到。
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()
当打印一个对象的时候被调用,这个方法类似于 java 的 toString 方法,当我们直接打印对象的时候回调这个函数。

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 相关文章推荐
substr()函数中文版
Oct 09 PHP
php下统计用户在线时间的一种尝试
Aug 26 PHP
解析php mysql 事务处理回滚操作(附实例)
Aug 05 PHP
php+ajax实现无刷新的新闻留言系统
Dec 21 PHP
在PHP中使用FastCGI解析漏洞及修复方案
Nov 10 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
Apr 07 PHP
利用PHP将图片转换成base64编码的实现方法
Sep 13 PHP
PHP编写daemon process详解及实例代码
Sep 30 PHP
PHP中trait使用方法详细介绍
May 21 PHP
PHP如何实现订单的延时处理详解
Dec 30 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
Feb 15 PHP
PHP文件类型检查及fileinfo模块安装使用详解
May 09 PHP
PHP flush()与ob_flush()的区别详解
Jun 03 #PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
Jun 03 #PHP
PHP Cookie的使用教程详解
Jun 03 #PHP
PHP register_shutdown_function函数的深入解析
Jun 03 #PHP
深入PHP与浏览器缓存的分析
Jun 03 #PHP
PHP判断图片格式的七种方法小结
Jun 03 #PHP
基于session_unset与session_destroy的区别详解
Jun 03 #PHP
You might like
PHP多个版本的分析解释
2011/07/21 PHP
PHP取进制余数函数代码
2012/01/19 PHP
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
为jQuery增加join方法的实现代码
2010/11/28 Javascript
JavaScript中的noscript元素属性位置及作用介绍
2013/04/11 Javascript
jQuery+ajax中getJSON() 用法实例
2014/12/22 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
jquery mobile实现可折叠的导航按钮
2017/03/11 Javascript
深入理解ES7的async/await的用法
2017/09/09 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
基于JQuery和DWR实现异步数据传递
2020/10/16 jQuery
Python导入txt数据到mysql的方法
2015/04/08 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
python交互模式基础知识点学习
2020/06/18 Python
区分python中的进程与线程
2020/08/13 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
应届毕业生个人求职自荐信
2014/01/06 职场文书
机械个人求职信范文
2014/01/24 职场文书
2014年感恩母亲演讲稿
2014/05/27 职场文书
2015年毕业生自我鉴定模板
2014/09/19 职场文书
合伙购房协议样本
2014/10/06 职场文书
三年级学生期末评语
2014/12/26 职场文书
考试作弊检讨
2015/01/27 职场文书
2015年仓库管理员工作总结
2015/04/21 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
暂住证明怎么写
2015/06/19 职场文书
九九重阳节致辞
2015/07/31 职场文书
家长会后的感想
2015/08/11 职场文书
奖学金主要事迹范文
2015/11/04 职场文书
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
MySQL外键约束(FOREIGN KEY)案例讲解
2021/08/23 MySQL