2013-03-15 77 views
5

自PHP 4開始,我已經開始構建自己的代碼庫。我已經使用require_once來導入類。現在在PHP 5.3中,我遇到了定義名稱空間並導入它們。導入命名空間與包含PHP中的文件

我想更改我的源文件以使用導入(use語句)而不是使用require_once。這是正確的決定,我不確定。

我想這很容易。在類文件頂部定義名稱空間並執行搜索&替換使用它們的其他文件(將require_once替換爲use)。在練習中可能會出現什麼問題?

而且會有性能改善嗎?在包含文件時,PHP很明顯是如何找到該文件的。但是在導入命名空間時,它並不那麼明顯。在搜索命名空間和使用PHP編制索引時是否會出現性能損失?

回答

16

userequire_once是完全不同的東西。 use根本沒有做任何文件導入。 use只是讓你的生活更輕鬆。相反,每一次寫作Full\Path\To\Class的,你可以做

use Full\Path\To\Class 

$bar = new Class(); 

你仍然負責包括正確的文件。

不用手動加載所有文件,您可以依靠PHP auto class loading

您可以使用Composer或者像Symfony 2Zend2這樣的框架來處理所有自動加載的東西。

遷移現有代碼以使用自動加載和use語句而不是include_once可能非常耗時。很可能沒有搜索和替換解決方案。

+0

謝謝,我沒有注意到自動類加載。然而,這聽起來像一個不好的做法,只能用解釋器語言來實現。它增加了開銷,如搜索類的整個路徑,並導致不良文檔,你不知道哪個文件使用什麼。 – bkilinc 2013-03-15 18:05:23

+0

我從來沒有看到任何性能問題,因爲auf auto class loading。如果你使用上述工具,你可以看到他們做了很多工作以確保查找速度快。畢竟Java在十多年來取得了這樣的成功。最後但並非最不重要的:依靠include/class加載的簡單規則可以大大簡化代碼。 – BetaRide 2013-03-16 05:53:50

+0

@bkilinc:PSR-0等標準允許您在整個應用程序中使用自動加載的一致規則。如果整個圖書館使用相同的標準,則可以爲您的整個應用程序使用單個自動加載器。這允許您編寫非常模塊化的OOP代碼,而不必擔心依賴關係,同時將性能開銷降至最低。 – 2014-07-23 12:38:45