2013-06-27 31 views
0

我正在尋找一種重新聲明,覆蓋或重命名PHP4中的函數的方法,以便對調用另一個函數的類執行unittest。我希望這個函數是一個測試函數。如何在PHP4中重新聲明,覆蓋或重命名函數?

我有幾個限制:

  • 它爲PHP4工作。
  • 它必須開箱即用,無需安裝別的東西。 (沒有adp或其他)。
+0

可能的重複http://stackoverflow.com/questions/3620659/is-it-possible-to-overwrite-a-function-in-php –

回答

0

的覆蓋功能,您可以如使用function_exists函數退出但檢查你可以重新聲明函數

if (!function_exists('function_name')) { 
    // ... proceed to declare your function 
} 
2

從技術上講,可以使用override_function()rename_function()功能。

雖然這不是一個非常乾淨的方式,但我建議您更新您的課程,讓您將呼叫重定向到其他地方。這樣

class MyClass { 
    public function doSomething() { 
     ... 
     do_complex_calc(); 
     ... 
    } 
} 

的東西:

例如,您可以更改此

class MyClass { 
    public $calc_helper = 'do_complex_calc'; 
    public function doSomething() { 
     ... 
     $helper = $this->calc_helper; 
     $helper(); 
     ... 
    } 
} 

$x = new MyClass(); 
$x->calc_helper = 'another_func_for_testing'; 
$x->doSomething(); 

這可以更加清理,但它顯示的總體思路。例如,我不建議將$calc_helper變量作爲public來使用 - 我會實現某種方法讓您改變它。

+0

是的,我有同樣的想法。這甚至可能適用於我的任務。謝謝 – Alex

+0

@Alex我剛剛更新了我的答案,以反映它**是可能的事實,儘管我仍然推薦了我最初描述的方式。 – jcsanyi