php __FILE__,__CLASS__等魔术变量,及实例(转)
今天看到一个魔术变量,是以前没见过的,__DIR__,我查了查,发现原来是php5.3新增的,顺便举几个例子,解释一下php的魔术变量
1,__FILE__
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
这个变量,我用的是最多的,估计也是大家用的最多的。
web服务器都会指定一个documentroot的,但是不同的服务器,设置的documentroot有可能是不同的,在这种情况下,把一个网站从一个服务器搬家到另一个服务器,这样就有可能因为路径的不同,造成网站跑不起来。
- <?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 __FILE__,__CLASS__等魔术变量,及实例(转)的更多相关文章
- php __FILE__,__CLASS__等魔术变量,及实例
今天突然看到几个自己不认识的魔术变量 不知道怎么用于是就上网查了一下,看到了这篇博客,写的真不错,希望自己以后也能学会这样总结 张映 发表于 2010-12-13 分类目录: php 标签:php, ...
- PHP获取目录和的方法通过魔术变量;通过超级全局变量;通过相关函数等等:
<?php /** * PHP获取路径或目录实现 * @link http://www.phpddt.com */ //魔术变量,获取当前文件的绝对路径 echo "__FILE__: ...
- PHP 魔术变量
PHP 魔术变量 PHP 向它运行的任何脚本提供了大量的预定义常量. 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 有八个魔术常 ...
- PHP 魔术变量和魔术函数详解
魔术变量 PHP 向它运行的任何脚本提供了大量的预定义常量. 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 有八个魔术常量它们的 ...
- php魔术变量和13个PHP魔术函数
PHP魔术变量确切地说是PHP魔术常量,不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了.比如说__LINE__放在不同的地方是显示不 ...
- php之快速入门学习-16(PHP 魔术变量)
PHP 魔术变量 PHP 向它运行的任何脚本提供了大量的预定义常量. 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 有八个魔术常 ...
- php超级全局变量和魔术变量
php超级全局变量和魔术变量 一.总结 一句话总结: 1.两者的书写形式非常不一样,超级全局变量是$_大写变量名 的形式,魔术变量是 __大写变量名的形式__ 2.两者的应用范围不一样,超级全局变量是 ...
- Paip.最佳实践-- Buildin variale 内建变量 ,魔术变量,预定义变量,系统常量,系统变量 1
Paip.最佳实践-- Buildin variale 内建变量 ,魔术变量,预定义变量,系统常量,系统变量 1.1.1 C++内建变量(__LINE__).... 1.1.2 ...
- PHP几种常见魔术方法与魔术变量解析
原文地址:http://small.aiweimeng.top/index.php/archives/49.html 先不多说,直接上代码,如下: class Demo { private $str ...
随机推荐
- linux 下su 和sudo 的用法以及区别
一. 使用 su 命令临时切换用户身份 1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beinan用 ...
- Flex 4.0及4.6发布的网络应用在内网内会访问很慢的解决方案
Flex 4.x 开发的程序部署在外网在能访问到www.adobe.com的时能够很快加载完成,但是部署在本地局域网,不能访问外网的服务器上,用浏览器访问应用需要加载几分钟的时间,这种等待时间客户几乎 ...
- Delphi开发的IP地址修改工具
用Delphi进行开发的,直接修改注册表,需重启电脑后才生效
- yhd日志分析(一)
yhd日志分析(一) 依据yhd日志文件统计分析每日各时段的pv和uv 建hive表, 表列分隔符和文件保持一致 load数据到hive表 写hive sql统计pv和uv, 结果保存到hive表2 ...
- 开发一个App的成本是多少?
英文出处:savvyapps.欢迎加入翻译小组. 在最近的一个会议上,一个叫Bob的老顾客引用了<App Savvy>(<放飞App:移动产品经理实战指南>)中探讨研发一个io ...
- c语言的结构体字节数统计
struct结构体的字节数 等于 结构体中最大类型的字节数的倍数. 如: typedef struct Student{ short id; //2个字节 char name[15]; / ...
- [转]WinExec、ShellExecute和CreateProcess及返回值判断方式
[转]WinExec.ShellExecute和CreateProcess及返回值判断方式 http://www.cnblogs.com/ziwuge/archive/2012/03/12/23924 ...
- 第2章 HelloWorld
----------------------------------------- 2-2 在设置应用图标的时候,一定要注意添加的图片一定是.ico 的要求格式(32*32像素). 可以在网上下载 ...
- QT 环境下开发socketCan接口程序
使用头文件 #include <QMainWindow>#include "QTimer"#include "QTime"#include &quo ...
- JSP动作学习一
创建一个简单的模拟登陆功能的网页,没有用数据库技术,只是简单的学习jsp语法 首先创建一个登陆页面 <%@ page language = "java" import=&qu ...