函数正在调用特定于文件的值


function is calling file specific values?

>我在单个文件中有一个非常简单的函数.php

<?php function file_nameecho(){
$fnam = basename(__FILE__, '.php'); 
echo $fnam;
}
?>

在其他.php文件中调用此函数时。

它仍然显示单个.php文件的名称?

我认为您将带有此函数的文件包含在另一个脚本中,现在您想知道为什么名称仍然是带有该函数的脚本中的名称,而不是调用函数的名称。

(所以我认为你做了什么:)

文件1.php:

function file_nameecho() {
    $fnam = basename(__FILE__, '.php'); 
    echo $fnam;
}

文件2.php:

include "file1.php";
file_nameecho();

输出将是:

file1.php

为了使您的函数像您想要的那样工作,请使用以下内容:

function file_nameecho(){
    $fnam = basename($_SERVER['PHP_SELF'], '.php'); 
    echo $fnam;
}

编辑:

这应该适用于您获取调用函数的文件名:

function file_nameecho(){
    $fnam = basename(debug_backtrace()[0]["file"], '.php'); 
    echo $fnam;
}

编辑2:

因此,按照OP的要求,对一切进行一些解释:D

  1. 为什么__FILE__返回定义函数的名称?

__FILE__ 是一个魔术常量,并返回文件名。

并引用手册中的一句话:

解析了符号链接的文件的完整路径和文件名。如果在包含中使用,则返回包含文件的名称。

因此,有关魔术常数的更多信息,请参阅:http://php.net/manual/en/language.constants.predefined.php

  1. debug_backtrace()做什么?

debug_backtrace()生成回溯。这就是我在函数中使用它的原因。您可以使用print_r(debug_backtrace());查看有关数据回溯的所有信息,这也是我发现在您的情况下它是[0]["file"]的方式。

有关更多信息,请参阅:http://php.net/manual/en/function.debug-backtrace.php

http://php.net/manual/en/language.constants.predefined.php __FILE__ 解析了符号链接的文件的完整路径和文件名。如果在包含中使用,则返回包含文件的名称。

FILE 变量将始终包含当前文件的文件名,其中正在访问变量,在您的情况下是"单个.php"

查看 PHP 手册以获取帮助。

它会显示"单身",文件将是单个.php,你可以看到php FILE手册。

不,它会显示包含文件的页面。调用您被迫在 other.php 中使用include ('single.php') function file_nameecho()。当服务器加载页面 other.php 无法运行具有另一个引用的页面__FILE__