我已经制作了一个PHP框架。要启动它,请执行以下操作:
require 'framework.php';
framework_start(__DIR__);
如果可能的话,我正在尝试删除__DIR__
部分。它告诉框架应用程序的“基本目录”是什么。我想不出任何办法从__DIR__
内部为调用framework_start()
的文件确定“ framework_start()
”。
我不禁为它不能只是而感到烦恼:
require 'framework.php';
framework_start();
...,然后framework_start();
自行找出__DIR__
的值。但是,如果我只是从包含__DIR__
的PHP文件中引用framework_start()
,显然它将返回错误的目录路径。
这有可能吗?如果可以,怎么办?
答案 0 :(得分:2)
我建议以下内容。在framework.php
文件顶部定义一个常量,以代替__DIR__
在框架中使用:
$trace = debug_backtrace(false);
$levelsToGoUp = 0; // set to 1 if called from within the function
if (array_key_exists($levelsToGoUp, $trace)) {
define('PARENTFILE', dirname($trace[$levelsToGoUp]['file']));
} else {
define('PARENTFILE', __DIR__);
}
如果您在函数debug_backtrace()
中调用了framework_start()
,则需要查看数组中键为1的条目(第一个是函数本身),我建议这样做。