2011-06-07 137 views
4

我有一些舊的類,我想轉換到PSR-0樣式目錄。我想對我的流程進行一次完整性檢查。使用名稱空間重新定位和重命名類

  1. 將現有的​​文件重命名並重新定位到Foo/Person.php
  2. Person.php中創建namespace Foo,並根據需要更新所有類引用,使其與名稱空間兼容。
  3. 爲了與舊代碼的兼容性,創建一個新的​​與此內容:

    <?php 
    
    require 'autoload.php'; // our psr-0 autoloader 
    class_alias('\Foo\Person', 'FooPerson'); 
    

我的希望是,這將使用兩種new FooPersonnew \Foo\Person啓用透明的實例。初步測試似乎支持這一點。我應該注意哪些陷阱?

回答

4

我沒有看到任何陷阱。但是,我建議使用另一種方法,因爲這可能會讓你錯過這個或那個舊的類名。您可以完全刪除FooPerson,在這種情況下,您將意識到困難的方式,您忘記更改類名稱或創建虛擬類,這有助於在有人嘗試使用它時跟蹤消息。

// File 'FooPerson.php' 

trigger_error("Class 'FooPerson'", E_USER_DEPRECATED); 
class FooPerson extends \Foo\Person {} 

因爲類到文件名的映射是根據PSR-0標準有效,這個文件被由磁帶自動加載機裝入太多。在自動加載器加載的的情況下,會發出E_USER_DEPRECATED,您可以修復它。

+2

是的,很好的調用re:觸發一個錯誤。 'E_USER_DEPRECATED'是最合適的。 – 2011-06-07 20:55:27

+0

+1 @Adam Backstrom:我打算說同樣的話。 ;) – netcoder 2011-06-07 20:58:06

+0

@Adam,@netcoder:當然。不知道爲什麼,但在我的世界裏沒有'E_USER_DEPRECATED',它會在5.4 ^^ – KingCrunch 2011-06-07 21:09:28