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 相关文章推荐
强烈推荐:php.ini中文版(2)
Oct 09 PHP
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
Mar 15 PHP
PHP+MYSQL 出现乱码的解决方法
Aug 08 PHP
php判断字符以及字符串的包含方法属性
Aug 30 PHP
PHP5+UTF8多文件上传类
Oct 17 PHP
php存储过程调用实例代码
Feb 03 PHP
PHP中操作ini配置文件的方法
Apr 25 PHP
Smarty变量调节器失效的解决办法
Aug 20 PHP
php中实现记住密码下次自动登录的例子
Nov 06 PHP
thinkphp模板用法和内容输出实例
Nov 28 PHP
PHP检测数据类型的几种方法(总结)
Mar 04 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
Oct 03 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设计模式 php实现单例模式(singleton)
2015/12/07 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
js 蒙版进度条(结合图片)
2010/03/10 Javascript
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
javascript innerHTML使用分析
2010/12/03 Javascript
让textarea自动调整大小的js代码
2011/04/12 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
原生JS实现导航下拉菜单效果
2020/11/25 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
[01:16]2014DOTA2 TI专访C9战队EE:中国五强中会占三席
2014/07/10 DOTA
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
python备份文件的脚本
2008/08/11 Python
Python制作爬虫采集小说
2015/10/25 Python
Python 基础教程之包和类的用法
2017/02/23 Python
python paramiko模块学习分享
2017/08/23 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
基于python实现学生管理系统
2018/10/17 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
用Python爬取QQ音乐评论并制成词云图的实例
2019/08/24 Python
python logging日志模块原理及操作解析
2019/10/12 Python
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
高中语文教学反思
2014/01/16 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
Python 正则模块详情
2021/11/02 Python
js判断两个数组相等的5种方法
2022/05/06 Javascript