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 的加密函数 md5,crypt,base64_encode 等使用介绍
Apr 09 PHP
php生成略缩图代码
Jul 16 PHP
php变量范围介绍
Oct 15 PHP
ThinkPHP3.1的Widget新用法
Jun 19 PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 PHP
php基于GD库画五星红旗的方法
Feb 24 PHP
php数据访问之增删改查操作
May 09 PHP
PHP入门教程之图像处理技巧分析
Sep 11 PHP
Symfony2创建基于域名的路由相关示例
Nov 14 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
Aug 15 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 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实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
jQuery 连续列表实现代码
2009/12/21 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
2013/05/08 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
JavaScript的递归之递归与循环示例介绍
2013/08/05 Javascript
javascript一元操作符(递增、递减)使用示例
2013/08/07 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
2016/08/04 Javascript
Iscrool下拉刷新功能实现方法(推荐)
2017/06/26 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
2019/12/04 Javascript
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
vue实现折线图 可按时间查询
2020/08/21 Javascript
Python实现从url中提取域名的几种方法
2014/09/26 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
python 文件转成16进制数组的实例
2018/07/09 Python
Python文本处理简单易懂方法解析
2019/12/19 Python
python自动化测试三部曲之unittest框架的实现
2020/10/07 Python
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
2013/01/30 HTML / CSS
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
教师个人自我剖析材料
2014/09/29 职场文书
工伤事故赔偿协议书(标准)
2014/09/29 职场文书
2015年初中元旦晚会活动总结
2014/11/28 职场文书
公司停电通知
2015/04/15 职场文书
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python
Mysql忘记密码解决方法
2022/02/12 MySQL
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript