日期:2014-05-17  浏览次数:20511 次

PHP中的__FILE,__CLASS等魔术变量

今天看到一个魔术变量,是以前没见过的,__DIR__,我查了查,发现原来是php5.3新增的,顺便举几个例子,解释一下php的魔术变量

1,__FILE__

文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
这个变量,我用的是最多的,估计也是大家用的最多的。

web服务器都会指定一个documentroot的,但是不同的服务器,设置的documentroot有可能是不同的,在这种情况下,把一个网站从一个服务器搬家到另一个服务器,这样就有可能因为路径的不同,造成网站跑不起来。

  1. <?php ??
  2. /** ?
  3. 在你的公用的配置文件中,来设置你的根目录,这样就不用担心经常搬家了。 ?
  4. */??
  5. define('ROOT_PATH',?dirname(__FILE__)?.?DIRECTORY_SEPARATOR); ??
  6. echo?ROOT_PATH; ??
  7. echo?"<br>"; ??
  8. echo?__FILE__; ??
  9. echo?"<br>"; ??
  10. echo?dirname(__FILE__); ??
  11. echo?"<br>"; ??
  12. echo?dirname(dirname(__FILE__)); ??
  13. ?>??
<?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__

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

  1. <?php ??
  2. echo?__LINE__;??//显示,__LINE__所在的行号 ??
  3. ?>??
<?php
echo __LINE__;  //显示,__LINE__所在的行号
?>

3,__CLASS__

类的名称,PHP5返回的结果是区分大小写的

  1. <?php ??
  2. class?base_class ??
  3. { ??
  4. ?function?say_a() ??
  5. ?{ ??
  6. ?echo?"'a'?-?said?the?"?.?__CLASS__?.?"<br/>"; ??
  7. ?} ??
  8. ?function?say_b() ??
  9. ?{ ??
  10. ?echo?"'b'?-?said?the?"?.?get_class($this)?.?"<br/>"; ??
  11. ?} ??
  12. } ??
  13. ??
  14. class?derived_class?extends?base_class ??
  15. { ?