2013-06-02 72 views
0

考慮一個大的應用程序,它自動加載階級作爲階級:加載類的特定版本時自動加載使用

function __autoload($class) 
{ 
    require_once("/var/www/application/classes/{$class}.php"); 
} 

可能有幾十其使用類文件,所有這些都依賴於一個特定的錯誤在課堂裏。現在我已經修復了這個bug,我需要更新所有調用該類的地方。

從課堂內部,我想列出已知固定的地方,從已修復錯誤的地方調用類。對於未列入白名單的地方,我會複製舊的行爲,並在白名單中提供正確的行爲。 有沒有一個乾淨的方式來做到這一點?

我正考慮在修復期間(可能需要幾天)添加一個新的構造函數參數$useFixedVersion,然後返回並在之後移除該參數。然而,這意味着我需要遍歷每個地方兩次,這似乎是一個相當糟糕的解決方法。 有沒有更好的方法來檢測班級被調用的位置?考慮到實例方法和靜態方法都受到影響。

讓我們暫時忽略耦合和錯誤代碼設計,這意味着我需要更正調用代碼,並將這個不幸的事實作爲給定的。讓我們也忽略一個不幸的事實,那就是我不能簡單地在Git中分支,做出我的修復,然後推向生產!

回答

1

有一個debug_backtrace()功能,這樣可以讓你知道那裏的東西都可以從所謂:

http://php.net/manual/en/function.debug-backtrace.php

這就是說,你有沒有考慮過使用命名空間呢?喜歡的東西:

namespace Foo\Bar; 
class FixedBaz extends Baz {} 

然後別名類需要:

namespace Foo\Bar; 
use FixedBaz as Baz; 
+0

謝謝丹尼斯。它看起來像debug_backtrace()將完美。我沒有看到使用名稱空間作爲一個很好的解決方法。 – dotancohen