最近我已經開始玩弄命名空間在PHP中,我沒有選擇的命名空間分隔/
的粉絲(就像大多數人有一個共同的感覺)/
在PHP中只包含所有的名稱空間和訪問類以及它們的類名是否很糟糕?
下面我用一個非常基本的/簡單的例子PHP中的命名空間。
我有一個Registry.class.php
文件具有Registry
類是在命名空間Library
我也有文件Controller.class.php
低於具有Controller
類是在命名空間在此稱爲Project
現在Project
命名空間我需要訪問不同命名空間中的Registry object
,因此我使用use Library\Registry
來導入該命名空間
做完這些後,我可以簡單地訪問我的Registry
類這樣的...
$this->registry = new Registry;
現在,如果我沒有使用use Library\Registry
那麼我將不得不訪問它像這樣
$this->registry = new /Library/Registry;
所以這是我的問題開始的地方。
對於這個簡單的例子,我只是把在Registry class
,在真實的項目,想象一下其他幾類和命名空間被帶進來,所以我將使用
use Library\Registry
和use Library\SOME OTHER CLASS
和use Library\YET ANOTHER CLASS
等等
我然後可以在對象/類上操作,就好像它們在這個名稱空間中一樣,所以不用使用其合適的名稱空間名稱預先固定類名,而只是通過其名稱(new Registry;
)實例化類,而不是new /Library/Registry;
我想知道這是否被認爲是不好的做法或不?它大大簡化了事情,並使代碼看起來更清潔IMO,但是如果在使用此方法編寫大量代碼之前,我想知道這種方法有什麼不好之處。我應該是pre-fixing
我的課程,當我實例化他們的名字空間INSTEAD導入他們與use /Path/to/Namespace/Classname
?
請與我分享您的知識,我意識到它會以任何方式工作,但我想確保。實施例類和命名空間如下加入:
Controller.class.php
<?php
namespace Project
{
use Library\Registry;
class Controller
{
public $registry;
function __construct()
{
include('E:\Library\Registry.class.php');
$this->registry = new Registry;
}
function show()
{
$this->registry;
echo '<br>Registry was ran inside testcontroller.php<br>';
}
}
}
?>
Registry.class.php
<?php
// Registry.class.php
namespace Library
{
class Registry
{
function __construct()
{
echo 'Registry.class.php Constructor was ran';
}
}
}
?>
我明白你在說什麼。在上面的例子中,'Library'是我將命名空間的所有'Library'類的東西,就像一個框架,然後上面的Controller將模擬在項目中訪問我的庫。我想這很好,它可以在任何方式使用,而無需修改我的庫代碼 – JasonDavis 2011-12-31 18:28:34