博客列表 >PHP中的魔术变量

PHP中的魔术变量

并向你招手祥子
并向你招手祥子原创
2018年01月06日 00:40:371088浏览

PHP 魔术变量

PHP预定义了很多常量,其中有8个魔术变量,他们会随着所处代码中的位置的变化而变化

1. __LINE__    在文件中的当前行号

示例代码

<?php
    echo '我是_LINE__,我在此文件的第 " '  . __LINE__ . ' " 行';
?>

输出结果

    echo '我是_LINE__,我在此文件的第 " '  . __LINE__ . ' " 行';


2. __FILE__  文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。

示例代码

<?php
    echo '我是_FILE__,我的路径是: " '  . __FILE__ ;
?>

输出结果

我是_FILE__,我的路径是: " E:\nawesm\debug\class\student.php


3. __DIR__  文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。

等价于 dirname(__FILE__)。除根目录外,目录中名不包括末尾的斜杠。

示例代码

<?php
    echo '我是_DIR__,我所在文件夹的路径是: " '  . __DIR__ ;
?>

输出结果

我是_DIR__,我所在文件夹的路径是: " E:\nawesm\debug\class

4. __FUNCTION__   函数名称。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

如果直接在函数外输出该变量,其值为

示例代码

<?php
    function TestFunction(){
        echo '我是_FUNCTION__,我所在函数名是: " '  .__FUNCTION__;
    }
    testfunction();
?>

输出结果

我是_FUNCTION__,我所在函数名是: " TestFunction

5.__CLASS__ 类的名称。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。

在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。

注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。

示例代码

<?php
class testClass{
    
    function TestFunction(){
        echo '我是_CLASS__,我所在类名是: " '  .__CLASS__;
    }
}
$testClass = new testClass();
$testClass -> TestFunction();
?>

输出结果

我是_CLASS__,我所在类名是: " testClass

6.__METHOD__  类的方法名。返回该方法被定义时的名字(区分大小写)。

示例代码1

<?php
function Testmethod(){
        echo '我是_METHOD__,我所在类名是: " '  .__METHOD__;
    }
Testmethod();
?>

输出结果

我是_METHOD__,我所在的方法定义时的名称是: " Testmethod

示例代码2

<?php
class testClass{
    function Testmethod(){
        echo '我是_METHOD__,我所在的方法定义时的名称是: " '  .__METHOD__;
    }
}
$testClass = new testClass();
$testClass -> Testmethod();
?>

输出结果

我是_METHOD__,我所在的方法定义时的名称是: " testClass::Testmethod

7. __NAMESPACE__  当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

示例代码

<?php
namespace MyPorject;
echo "我所在的命名空间为".__NAMESPACE__;
?>

输出结果

我所在的命名空间为MyPorject

8.  __TRAIT__   Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。

Trait 名包括其被声明的作用区域(例如 Foo\Bar)。从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。

示例代码

<?php
trait PeanutButter {
    function traitName() {echo __TRAIT__;}
}

trait PeanutButterAndJelly {
    use PeanutButter;
}

class Test {
    use PeanutButterAndJelly;
}

(new Test)->traitName(); //PeanutButter
?>

输出结果

PeanutButter



声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议