我在single.php文件中有一个非常简单的函数
<?php function file_nameecho(){
$fnam = basename(__FILE__, '.php');
echo $fnam;
}
?>
在other.php文件中调用此函数时。
它仍然显示single.php文件的名称?
答案 0 :(得分:2)
我认为你将带有这个函数的文件包含在另一个脚本中,现在你想知道为什么名称仍然是带有函数的脚本的名称,而不是调用函数的名称。
(所以我想你做了什么:)。
file1.php:
function file_nameecho() {
$fnam = basename(__FILE__, '.php');
echo $fnam;
}
file2.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
__FILE__
会返回定义函数的名称? __FILE__
是一个魔术常量并返回文件名。
手册中的引用:
解决了符号链接的文件的完整路径和文件名。如果在include中使用,则返回包含文件的名称。
因此,有关魔术常数的更多信息,请参阅:http://php.net/manual/en/language.constants.predefined.php
debug_backtrace()
做什么? debug_backtrace()
生成回溯。这就是我在函数中使用它的原因。您可以使用print_r(debug_backtrace());
查看有关数据回溯的所有信息,这也是我在您的情况下发现[0]["file"]
的方式。
有关详细信息,请参阅:http://php.net/manual/en/function.debug-backtrace.php
答案 1 :(得分:0)
http://php.net/manual/en/language.constants.predefined.php
__FILE__
已解决符号链接的文件的完整路径和文件名。如果在include中使用,则返回包含文件的名称。
答案 2 :(得分:0)
FILE 变量将始终包含访问变量的当前文件的文件名,在您的情况下是#34; single.php&#34;
请查看PHP Manual寻求帮助。
答案 3 :(得分:0)
它会显示&#34;单身&#34;, 文件将是single.php, 你可以看到php FILE manual。
答案 4 :(得分:0)
不,它会显示包含文件的页面。
要调用function file_nameecho()
,您必须在other.php中强制使用include ('single.php')
。
当服务器加载页面时,other.php无法运行带有其他引用的__FILE__
页面