2012-02-14 5 views
11

と1つのファイルに名前空間には、私は() 'saの名前空間など、必要ファイルを持っています

<?php 
namespace Beer { 
    class Carlsburg {} 
} 

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

しかし、PHPインタプリタはNo code may exist outside of namespaceという文句を言います。したがって、私は$foo宣言をネームスペースにラップすることができますが、そのネームスペースにBeerをラップしてアクセスする必要があります。ここで私は避けるようにしようとしています何の実施例である:

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

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

は、ファイル内のBeer名前空間のためのコード、まだないを含めるする方法はあります(残して独自の名前空間で$foo宣言を包みますそれはグローバルな名前空間にありますか?)

ありがとうございました。

+0

例#3を1として、この

namespace Beer { class Carlsburg {} } //global scope namespace { $foo = new Beer\Carlsburg(); } 

をお試しください! – marko

答えて

15

あなたはグローバルな名前空間を使用する必要があります - :

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

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

DemoDefining multiple namespaces in the same fileDocsを参照してくださいこちらをご覧ください

<?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();' –

+0

@skwee oops ...と書かない限り、これはうまくいきません。質問 – ManseUK

+2

と一致するように更新するか、 'use'を利用してください。http:// stackoverflowを参照してください。// 9274472/367456 – hakre

2

は、名前空間の名前の前にバックスラッシュを置く試してみてください。

$beer = new \Beer\Carlsberg(); 

初期のバックスラッシュは、「グローバル名前空間」に変換されます。先行するバックスラッシュを入れないと、クラス名は現在の名前空間に変換されます。

3

をちょうどそれを書き、それは "名前" を持っていません。

関連する問題