2012-04-26 114 views
1

可能重复:
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\Classa/class.php,我想用MyName\Class extends \MyName\Class(在a/class.php之内)进行扩展,但我希望自动加载器看起来像当在a/class.php内询问时,在的b/class.php

+0

@hakre,我试着回溯下面的脚本,但是'random.php'(随机文件)在​​调用自身时从来不会出现在回溯中。 – Shoe 2012-04-26 12:04:04

+0

您的代码在使用回溯的问题中在哪里?我没看到它。 – hakre 2012-04-26 12:06:07

+0

我在'$ 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

回答

0

您是否尝试过debug_backtrace()?

+0

是的,但没有出现类本身被调用的文件。 – Shoe 2012-04-26 12:03:00

相关问题