搜索
首页后端开发php教程PHP中的_FILE,CLASS等戏法变量

PHP中的__FILE,__CLASS等魔术变量

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

1,__FILE__

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

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

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

3,__CLASS__

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

  1. class?base_class ??
  2. { ??
  3. ?function?say_a() ??
  4. ?{ ??
  5. ?echo?"'a'?-?said?the?"?.?__CLASS__?.?"
    "
    ; ??
  6. ?} ??
  7. ?function?say_b() ??
  8. ?{ ??
  9. ?echo?"'b'?-?said?the?"?.?get_class($this)?.?"
    "
    ; ??
  10. ?} ??
  11. } ??
  12. ??
  13. class?derived_class?extends?base_class ??
  14. { ??
  15. ?function?say_a() ??
  16. ?{ ??
  17. ?parent::say_a(); ??
  18. ?echo?"'a'?-?said?the?"?.?__CLASS__?.?"
    "
    ; ??
  19. ?} ??
  20. ?function?say_b() ??
  21. ?{ ??
  22. ?parent::say_b(); ??
  23. ?echo?"'b'?-?said?the?"?.?get_class($this)?.?"
    "
    ; ??
  24. ?} ??
  25. } ??
  26. ??
  27. $obj_b?=?new?derived_class(); ??
  28. $obj_b->say_a(); ??
  29. echo?"
    "
    ; ??
  30. $obj_b->say_b(); ??
  31. ?> ??
  32. 结果为: ??
  33. 'a'?-?said?the?base_class ??
  34. 'a'?-?said?the?derived_class ??
  35. ??
  36. 'b'?-?said?the??derived_class ??
  37. 'b'?-?said?the?derived_class??
<?phpclass 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中返回的结果是区分大小写的

二个都是取得方法的名称,有什么不同呢?

  1. class?test ??
  2. { ??
  3. ?function?a() ??
  4. ?{ ??
  5. ?echo?__FUNCTION__; ??
  6. ?echo?"
    "
    ; ??
  7. ?echo?__METHOD__; ??
  8. ?} ??
  9. } ??
  10. ??
  11. function?good?(){ ??
  12. ?echo?__FUNCTION__; ??
  13. ?echo?"
    "
    ; ??
  14. ?echo?__METHOD__; ??
  15. } ??
  16. ??
  17. $test?=?new?test(); ??
  18. $test->a(); ??
  19. echo?"
    "
    ; ??
  20. good(); ??
  21. ?> ??
  22. 返回结果: ??
  23. a ??
  24. test::a ??
  25. good ??
  26. good??
<?phpclass 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();?>返回结果:atest::agoodgood

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

5,__DIR__

文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)

如果在5.3以前的版本中想用__DIR__的话,可以这样

  1. if(!defined('__DIR__'))?{ ??
  2. ?$iPos?=?strrpos(__FILE__,?"/"); ??
  3. ?define("__DIR__",?substr(__FILE__,?0,?$iPos)?.?"/"); ??
  4. } ??
  5. ?>??
<?phpif (!defined('__DIR__')) { $iPos = strrpos(__FILE__, "/"); define("__DIR__", substr(__FILE__, 0, $iPos) . "/");}?>

6,__NAMESPACE__

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

7,__STATIC__

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

  1. //php5.3 ??
  2. class?Model ??
  3. { ??
  4. ?public?static?function?find() ??
  5. ?{ ??
  6. ?echo?__STATIC__; ??
  7. ?} ??
  8. } ??
  9. ??
  10. class?Product?extends?Model?{} ??
  11. class?User?extends?Model?{} ??
  12. ??
  13. Product::find();?//?"Product" ??
  14. User::find();?//?"User" ??
  15. ?>??
<?php //php5.3class Model{ public static function find() { echo __STATIC__; }}class Product extends Model {}class User extends Model {}Product::find(); // "Product"User::find(); // "User"?>
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Python中的class类和method方法的使用方法Python中的class类和method方法的使用方法Apr 21, 2023 pm 02:28 PM

类和方法的概念和实例类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。类的构造方法__init__():类有一个名为init()的特殊方法(构造方法),该方法在类实例化时会自动调用。实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用self修饰的变量。实例化:创建一个类的实例,类的具体对象。继承:即一个派生类(derivedclass)继承基类(baseclass)的

五个精选的Go语言开源项目,带你探索技术世界五个精选的Go语言开源项目,带你探索技术世界Jan 30, 2024 am 09:08 AM

在当今科技快速发展的时代,编程语言也如雨后春笋般涌现出来。其中一门备受瞩目的语言就是Go语言,它以其简洁、高效、并发安全等特性受到了许多开发者的喜爱。Go语言以其强大的生态系统而著称,其中有许多优秀的开源项目。本文将介绍五个精选的Go语言开源项目,带领读者一起探索Go语言开源项目的世界。KubernetesKubernetes是一个开源的容器编排引擎,用于自

Go语言开发必备:5个热门框架推荐Go语言开发必备:5个热门框架推荐Mar 24, 2024 pm 01:15 PM

《Go语言开发必备:5个热门框架推荐》Go语言作为一门快速、高效的编程语言,受到越来越多开发者的青睐。为了提高开发效率,优化代码结构,很多开发者选择使用框架来快速搭建应用。在Go语言的世界中,有许多优秀的框架可供选择。本文将介绍5个热门的Go语言框架,并提供具体的代码示例,帮助读者更好地理解和使用这些框架。1.GinGin是一个轻量级的Web框架,拥有快速

使用jQuery替换元素的class名称使用jQuery替换元素的class名称Feb 24, 2024 pm 11:03 PM

jQuery是一种经典的JavaScript库,被广泛应用于网页开发中,它简化了在网页上处理事件、操作DOM元素和执行动画等操作。在使用jQuery时,经常会遇到需要替换元素的class名的情况,本文将介绍一些实用的方法,以及具体的代码示例。1.使用removeClass()和addClass()方法jQuery提供了removeClass()方法用于删除

python中class是什么意思python中class是什么意思May 21, 2019 pm 05:10 PM

class是python中的一个关键字,用来定义一个类,定义类的方法:class后面加一个空格然后加类名;类名规则:首字母大写,如果多个单词用驼峰命名法,如【class Dog()】。

SpringBoot怎么通过自定义classloader加密保护class文件SpringBoot怎么通过自定义classloader加密保护class文件May 11, 2023 pm 09:07 PM

背景最近针对公司框架进行关键业务代码进行加密处理,防止通过jd-gui等反编译工具能够轻松还原工程代码,相关混淆方案配置使用比较复杂且针对springboot项目问题较多,所以针对class文件加密再通过自定义的classloder进行解密加载,此方案并不是绝对安全,只是加大反编译的困难程度,防君子不防小人,整体加密保护流程图如下图所示maven插件加密使用自定义maven插件对编译后指定的class文件进行加密,加密后的class文件拷贝到指定路径,这里是保存到resource/corecla

使用Golang的Web框架Echo框架实现分布式任务调度使用Golang的Web框架Echo框架实现分布式任务调度Jun 24, 2023 am 11:49 AM

随着互联网的发展和信息技术的进步,大数据时代已经来临,数据分析、机器学习等领域也得到了广泛的应用。在这些领域中,任务调度是一个不可避免的问题。如何实现高效的任务调度,对于提高效率至关重要。在本篇文章中,将介绍如何使用Golang的Web框架Echo框架实现分布式任务调度。一、介绍Echo框架Echo是一个高性能、可伸缩、轻量级的GoWeb框架。它基于HTT

PHP Class用法详解:让你的代码更清晰易读PHP Class用法详解:让你的代码更清晰易读Mar 10, 2024 pm 12:03 PM

在编写PHP代码时,使用类(Class)是一个非常常见的做法。通过使用类,我们可以将相关的功能和数据封装在一个单独的单元中,使代码更加清晰、易读和易维护。本文将详细介绍PHPClass的用法,并提供具体的代码示例,帮助读者更好地理解如何在实际项目中应用类来优化代码。1.创建和使用类在PHP中,可以使用关键字class来定义一个类,并在类中定义属性和方法。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具