好的,这是一个真正的简短查询。
我在函数内部调用__FILE__
。
现在,这个函数本身就在一个必需的文件中。
现在,当我从Parent文件中调用此函数时,__FILE__
会输出父文件还是包含的文件?
哦,我正在寻找一个我可以确认的来源,如果可能的话,因为我的测试给了我完全荒谬的结果。
此外,如果这应该显示子(包含)文件,我应该怎么做才能显示父文件路径? (某些变化或什么?)
答案 0 :(得分:3)
document说:
__ FILE __
文件的完整路径和文件名。如果在include中使用,则返回包含文件的名称。
答案 1 :(得分:3)
__FILE__
始终替换为符号出现的文件名。
要获取调用函数的文件的名称,可以使用debug_backtrace()
。这会将当前的callstack作为一个数组返回,每个子数组都包含从中调用的文件,行和功能键。
您可以将最前面的元素从数组中移出,以获取调用函数的位置:
<?php
require_once('b.php');
b();
<?php
function b() {
$bt = debug_backtrace();
var_export($bt);
}
array (
0 => array (
'file' => '/home/meagar/a.php',
'line' => 5,
'function' => 'b',
'args' => array( ),
),
)
同样的事情没有函数调用:
<?php require_once('b.php');
<?php
$bt = debug_backtrace();
var_export($bt);
array (
0 => array (
'file' => '/home/meagar/a.php',
'line' => 3,
'function' => 'require_once',
),
)
答案 2 :(得分:0)
以下是我在其中一个项目中修复此问题的示例。
问题。
我在html模板的head
部分调用了以下方法:
public static function loadPageSpecificStyle()
{
$directory_files = scandir(dirname(__FILE__));
foreach($directory_files as $key => $file_name)
{
if(strpos($file_name, 'css') !== FALSE)
{
echo '<link rel="stylesheet" type="text/css" href="' . $file_name . '" />';
}
}
}
解决方案。
我将__FILE__
常量作为参数传递:
public static function loadPageSpecificStyle($file_as_argument)
{
$directory_files = scandir(dirname($file_as_argument));
foreach($directory_files as $key => $file_name)
{
if(strpos($file_name, 'css') !== FALSE)
{
echo '<link rel="stylesheet" type="text/css" href="' . $file_name . '" />';
}
}
}
在我的页面的head
中,我只是这样称呼:WhateverClass::loadPageSpecificStyle(__FILE__);
希望这有帮助!
答案 3 :(得分:-1)
据我所知,你正在寻找的东西 - 获得“父母”的路径包括它本身又是一个包含 - 是不可能的,甚至不能使用debug_backtrace()
。
您必须创建自己的include函数,以跟踪包含文件的“堆栈”。