2012-04-26 113 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

相關問題