2011-12-31 49 views
3

最近我已經開始玩弄命名空間在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\Registryuse Library\SOME OTHER CLASSuse 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'; 
     } 
    } 
} 
?> 

回答

3

一個命名空間的主要目的之一是防止名稱大代碼庫中的衝突以及共享代碼和導入庫的衝突。如果你沒有名稱衝突問題,那麼我不一定會看到使用每個類都有什麼問題。但是,如果你發現自己對所有類都這樣做了,那麼我會首先問你爲什麼要使用名稱空間。如果您的代碼將被其他人用作API或庫,這對我來說似乎是有意義的。

+0

我明白你在說什麼。在上面的例子中,'Library'是我將命名空間的所有'Library'類的東西,就像一個框架,然後上面的Controller將模擬在項目中訪問我的庫。我想這很好,它可以在任何方式使用,而無需修改我的庫代碼 – JasonDavis 2011-12-31 18:28:34

相關問題