首先,我在PSR standards中沒有看到任何明確的建議。如果我在這裏遺漏了任何東西,請糾正我。這就是爲什麼我在下面寫的所有內容都是我個人的觀點,但不是一個既定的標準
二,我認爲這取決於。讓我評論每一個案例。
// switch into namespace (probably worst option)
namespace Foo;
$bar = new Bar;
我看不出有什麼理由試圖做到這一點,很可能這是行不通的。至少您不能在同一個文件中多次切換命名空間。檢查PHP文檔中的Defining namespaces部分。
含有一個命名空間必須在 之前的任何其他代碼的文件頂部聲明命名空間文件 - 有一個例外:在declare 關鍵字。
// access via global namespace
$bar = new \Foo\Bar;
爲什麼不呢?例如,您可能會寫入\PDOException
或\stdClass
,並且不會導入它。我個人總是從全局命名空間導入類,但這只是我的愛好。我做而不是看到其他人做同樣的任何理由,我看到了很多來自全局名稱空間的類未導入的例子。
// alias namespace
use Foo;
$bar = new Foo\Bar;
當您需要來自其他命名空間的許多類時,這不是一個壞主意。當您爲註釋導入Doctrine\ORM\Mapping
時的常見示例。檢查在Symfony Doctrine tutorial
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
一個例子這清楚地表明,Column
類屬於Doctrine\ORM\Mapping
命名空間。你並不需要導入所有的類,我認爲它甚至看起來更好,而不是當你寫
/**
* @Column(type="integer")
* @Id
* @GeneratedValue(strategy="AUTO")
*/
private $id;
因爲它允許組的註釋和說明,這些註解是ORM,因爲你可能會,如果您有其他註釋將。
// alias specific class
use Foo\Bar;
$bar = new Bar;
我認爲這是最常見的情況,當你需要命名空間的幾個類並多次使用它們。因此,如果您使用名稱空間替換名稱而不是名稱,它可能會提高可讀性。您可能會使用set alias作爲導入類,以提高可讀性並避免衝突。