可能重复:
php: determine where function was called from如何在特定文件中调用函数行为的方式不同?
我有一个自动加载功能my_function($class)
,可以被任何脚本调用。它由PHP的spl_autoload_call()
调用,并且可以在任何地方发生。我如何编写my_function($class)
来检测特定$file
何时调用它?
喜欢的东西:
$file = '/htdocs/project/whatever.php';
if ($caller_file == $file) {
...
如何找到$caller_file
? 我的确明白这个问题令人困惑,但我现在不能说出更好的话。所以,如果你有任何问题的理解,请在评论中告诉我。
编辑(上下文)如果自动加载器加载的文件与自动加载器的调用方式相同,我想让脚本加载不同的类文件。
例如给:
namespace Something;
class Random extends Random {}
应该不会加载本身,而是一个不同的文件中,我们有:
namespace Something;
class Random { ... }
换句话说:
如果我定义什么MyName\Class
在a/class.php
,我想用MyName\Class extends \MyName\Class
(在a/class.php
之内)进行扩展,但我希望自动加载器看起来像当在a/class.php
内询问时,在的b/class.php
?
@hakre,我试着回溯下面的脚本,但是'random.php'(随机文件)在调用自身时从来不会出现在回溯中。 – Shoe 2012-04-26 12:04:04
您的代码在使用回溯的问题中在哪里?我没看到它。 – hakre 2012-04-26 12:06:07
我在'$ debug ='debug = debug_backtrace()''出来的'$ debug'的自动加载器脚本中做了'var_dump()'。没有我想要的调用者文件,因为当他到达'a/random.php'时,自动加载器再次要求'a/random.php'(因为Random随机)导致PHP“类未找到”错误。相反,我希望autoloader脚本在'a/random.php'内调用Random时加载'b/random.php'。你明白吗? – Shoe 2012-04-26 12:09:20