2013-03-07 51 views
1

有沒有任何方法可以確定函數是否在PHP的同一個類中調用? 除了使用類似debug_backtrace如果內部調用函數

更新:

這是目前我在做什麼:

class Alex { 
    function __construct() 
    { 
    $this->internal = false; 
    } 

    function a() 
    { 
    $this->internal = true; 
    $this->b(); 
    } 

    function b() 
    { 
    if($this->internal) 
     // ... 
    else 
     // ... 
    } 
} 
+0

您是在尋找一般還是一種解決方案?你是否需要提供函數列表,如果它們被多次調用或檢查它的確切功能? – Michael 2013-03-07 15:44:49

+0

[PHP 5中的調用函數?]可能的重複(http://stackoverflow.com/questions/190421/caller-function-in-php-5) – aorcsik 2013-03-07 15:46:08

+0

關於case解決方案。我需要檢查函數(何時調用)在類中(通過另一個函數)或從外部調用(作爲屬於控制器的方法) – Alex 2013-03-07 15:46:48

回答

2

我不知道你爲什麼想這樣做;這種要求是可疑的,通常是有原因的。

這就是說,你可以做一個protected克隆public功能的使用,告訴你如果打電話的是內部的或外部的附加參數,使public版本推遲到protected實施。

class Before 
{ 
    public foo() { /* code here */ } 
} 

class After 
{ 
    public foo() { $this->fooCore(false); } 
    protected fooCore($calledFromInside = true) { /* code here */ } 

    // At this point you should make sure that you never call $this->foo() 
    // directly from inside class After 
} 
+0

inte休息的工作,但沒有......這隻會讓事情變得複雜。 Tnx – Alex 2013-03-07 15:51:25

+0

不幸的是,如果你需要知道'__call'是由類本身調用還是外部調用,這將不起作用。 – Nick 2017-02-28 20:33:00

-1

有可能在NetBeans調試PHP比如像你可以看到debugging in NetBeans。此外,您可以在sseful PHP tools上找到有用的工具,如Webgrind或Xdebug。

+0

'debug_backtrace'我已經提到它...並且在實時服務器上,我沒有NetBeans ... – Alex 2013-03-07 15:53:17

+0

@ w0rldart請參閱工具 – user1929959 2013-03-07 15:57:07

0

不是我所知道的。我通過在類中調用一個額外的可選參數來傳遞一個值來解決類似的問題。

HTH :)

+0

檢查我更新的問題......我現在正在做什麼 – Alex 2013-03-07 15:53:41