php魔术变量用法实例详解


Posted in PHP onNovember 13, 2014

本文实例讲述了php魔术变量用法,其中__DIR__是php5.3新增的,分享给大家供大家参考。具体用法分析如下:

系统常量

__FILE__ 当前文件名
__LINE__ 当前行数
__FUNCTION__ 当前函数名
__CLASS__ 当前类名
__METHOD__ 当前对象的方法名

详细分析

1. __FILE__

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

1)dirname(__FILE__) 函数返回的是脚本所在在的路径。 更新网络 
比如文件 b.php 包含如下内容: 

<?php   

$basedir = dirname(__FILE__);   

echo $basedir  

//将在页面打印出一个这个文件所在绝对路径!  

?>

 
我做的测试得到结果: E:websiteothertestcms 
这个相当于, asp中的server.mappth的用法 
如果b.php被其他目录里的a.php文件require 或者 include 去引用的话。 变量$basedir 的内容还是b.php所在的那个文件夹的路径。 而不是变成a.php文件所在的目录。

2)dirname(__FILE__) 一般会返回文件所的当前目录到系统根目录的一个目录结构。 
不会返回当前的文件名称。 dirname(__FILE__) 也可能返回一个 . (当前目录) [原因是 b.php 文件在 http.conf 或者 PHP 配置开发环境的默认WEB目录下

<?php

/**

在你的公用的配置文件中,来设置你的根目录,这样就不用担心经常搬家了。

*/

define('ROOT_PATH', dirname(__FILE__) . DIRECTORY_SEPARATOR);

echo ROOT_PATH;

echo "<br>";

echo __FILE__;

echo "<br>";

echo dirname(__FILE__);

echo "<br>";

echo dirname(dirname(__FILE__));

?>

2. __LINE__

文件中的当前行号。这个变量在调试错误的时候,还是比较有作用的,其他的时候,没什么用处,纯属个人观点。

<?php

echo __LINE__;  //显示,__LINE__所在的行号

?>

3. __CLASS__
类的名称,PHP5返回的结果是区分大小写的
<?php

class base_class

{

function say_a()

{

echo "'a' ? said the " . __CLASS__ . "<br/>";

}

function say_b()

{

echo "'b' ? said the " . get_class($this) . "<br/>";

}

}

class derived_class extends base_class

{

function say_a()

{

parent::say_a();

echo "'a' ? said the " . __CLASS__ . "<br/>";

}

function say_b()

{

parent::say_b();

echo "'b' ? said the " . get_class($this) . "<br/>";

}

}

$obj_b = new derived_class();

$obj_b->say_a();

echo "<br/>";

$obj_b->say_b();

?>

结果为:
'a' ? said the base_class

'a' ? said the derived_class

'b' ? said the  derived_class

'b' ? said the derived_class

有的时候,我们可以用get_class来代替__CLASS__

4. __FUNCTION__和__METHOD__

__FUNCTION__:函数名称,php5中返回的结果是区分大小写的
__METHOD__:方法中的函数名称,php5中返回的结果是区分大小写的
二个都是取得方法的名称,有什么不同呢?

<?php

class test

{

function a()

{

echo __FUNCTION__;

echo "<br>";

echo __METHOD__;

}

}

function good (){

echo __FUNCTION__;

echo "<br>";

echo __METHOD__;

}

$test = new test();

$test->a();

echo "<br>";

good();

?>

返回结果:
a
test::a
good
good
相对于孤立的函数来说,二个都可以取出函数名,没什么区别,如果是class中的方法时,__FUNCTION__只能取出class的方法名,而__METHOD__不光能取出方法名,还能取出class名

5. __DIR__

文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)
如果在5.3以前的版本中想用__DIR__的话,可以这样

<?php

if(!defined('__DIR__')) {

$iPos = strrpos(__FILE__, "/");

define("__DIR__", substr(__FILE__, 0, $iPos) . "/");

}

?>

6. __NAMESPACE__

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

7. __STATIC__

当你调用class的静态方法时,返回class名称,区分大小写。如果在继承中调用的话,不管在继承中有没有定义,都能返回继承的class名。

<?php

//php5.3

class Model

{

public static function find()

{

echo __STATIC__;

}

}

class Product extends Model {}

class User extends Model {}

Product::find(); // "Product"

User::find(); // "User"

?>

补充:php中魔术方法

__construct() 当实例化一个对象的时候,这个对象的这个方法首先被调用。
__destruct() 当删除一个对象或对象操作终止的时候,调用该方法。
__get() 当试图读取一个并不存在的属性的时候被调用。
__set() 当试图向一个并不存在的属性写入值的时候被调用。
__call() 当试图调用一个对象并不存在的方法时,调用该方法。
__toString() 当打印一个对象的时候被调用
__clone() 当对象被克隆时,被调用
__isset()
__unset()
__autoload($classname)
__sleep()
__wakeup()

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP模板引擎SMARTY
Oct 09 PHP
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
Oct 09 PHP
PHP 学习路线与时间表
Feb 21 PHP
第五章 php数组操作
Dec 30 PHP
分享一下贝贝成长进度的php代码
Sep 14 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
Jun 03 PHP
解析PHP无限级分类方法及代码
Jun 21 PHP
解析linux下安装memcacheq(mcq)全过程笔记
Jun 27 PHP
基于命令行执行带参数的php脚本并取得参数的方法
Jan 25 PHP
PHP面向对象自动加载机制原理与用法分析
Oct 14 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
Apr 21 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 PHP
html静态页面调用php文件的方法
Nov 13 #PHP
PHP动态页生成静态页的3种常用方法
Nov 13 #PHP
PHP使用json_encode函数时不转义中文的解决方法
Nov 12 #PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
Nov 12 #PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 #PHP
php基于str_pad实现卡号不足位数自动补0的方法
Nov 12 #PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
Nov 12 #PHP
You might like
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
SONY ICF-SW7600的电路分析
2021/03/02 无线电
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
2008/03/28 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
Nginx实现反向代理
2017/09/20 Servers
PHP调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
ExtJS 简介 让你知道extjs是什么
2008/12/29 Javascript
JavaScript 事件对象的实现
2009/07/13 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
jquery ui dialog替代confirm实例分析
2016/01/25 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
使用js实现将后台传入的json数据放在前台显示
2018/08/06 Javascript
Javascript中绑定click事件的四种方式介绍
2018/10/26 Javascript
小程序开发中如何使用async-await并封装公共异步请求的方法
2019/01/20 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
[06:20]2015国际邀请赛第三日top10
2015/08/08 DOTA
[52:02]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第二场 2月26日
2021/03/11 DOTA
Python编码类型转换方法详解
2016/07/01 Python
Python变量和字符串详解
2017/04/29 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
python判断两个序列的成员是否一样的实例代码
2020/03/01 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
Pycharm同步远程服务器调试的方法步骤
2020/11/04 Python
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
交通专业个人自荐信格式
2013/09/23 职场文书
化妆品店促销方案
2014/02/24 职场文书
关爱女孩行动实施方案
2014/03/13 职场文书
马智宇结婚主持词
2014/04/01 职场文书
班主任个人工作反思
2014/04/28 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
升学宴学生答谢词
2015/01/05 职场文书
暂住证证明
2015/06/19 职场文书