2012-02-14 145 views
11

一個單一的文件我有一個要求文件()'SA命名空間,因爲這樣的:PHP:命名空間與全局命名空間

<?php 
require_once('Beer.php'); // This file contains the Beer namespace 

$foo = new Beer\Carlsburg(); 
?> 

我想直接把啤酒命名空間在同一個文件,像這樣(unworking)的例子:

<?php 
namespace Beer { 
    class Carlsburg {} 
} 

$foo = new Beer\Carlsburg(); 
?> 

但是,PHP解釋器抱怨說No code may exist outside of namespace。因此,我可以在命名空間中包裝$foo聲明,但是我還必須在該命名空間中包裝啤酒以訪問它!下面是我試圖避免工作示例:

<?php 
namespace Main\Beer { 
    class Carlsburg {} 
} 

namespace Main { 
    $foo = new Beer\Carlsburg(); 
} 
?> 

有沒有什麼辦法,包括對文件中的Beer命名空間中的代碼,但包裹在它自己的命名空間中的$foo聲明(離去它在全局命名空間中)?

謝謝。

+0

你應該有喜力作爲命名空間! – marko 2014-06-04 19:58:56

回答

15

您應該使用全局命名空間:

<?php 
namespace Beer { 
    class Carlsburg {} 
} 


namespace { // global code 
    $foo = new Beer\Carlsburg(); 
} 
?> 

看到這裏 - >http://php.net/manual/en/language.namespaces.definitionmultiple.php

+0

除非您編寫'$ foo = new Main \ Beer \ Carlsburg();' – 2012-02-14 09:34:12

+0

@skwee oops ...對不起 - 更新以匹配問題 – ManseUK 2012-02-14 09:35:25

+2

或者使用'use',請參閱http:// stackoverflow。 com/a/9274472/367456 – hakre 2012-02-14 09:42:15

2

嘗試命名空間名稱前放置一個反斜槓:

$beer = new \Beer\Carlsberg(); 

初始反斜槓被翻譯爲「全局命名空間」。如果你沒有放置反斜槓,類名將被轉換爲當前名稱空間。