2011-09-19 10 views
6

C#のusing Name.Space;ステートメントに相当するものは、その名前空間のすべてのクラスを現在のファイルで使用できるようにするものですか?これはPHPでも可能ですか?PHPの名前空間:C#と同等のもの

私が好きなもの(動作しません):

<?php 
# myclass.php 
namespace Namespace; 
class myclass { 
} 
?> 

<?php 
# main.php 
include 'myclass.php' 
use Namespace; 

new myclass(); 
?> 

答えて

8

はありません。 PHPでは、インタプリタは(特に__autoloadの存在により)存在するかもしれないすべてのクラスを知りませんので、実行時に多くの競合が発生します。 PHPを知ることができない - __autoload編でなければなりませんFooの\例外があるかもしれません電子

use Foo\*; // Invalid code 
throw new Exception(); 

:このような何かを持ちます。

use Foo\Bar as B; 
$o = new B\Baz(); // Is Foo\Bar\Baz 
+0

PHPは既存の(およびインポートされた)すべての名前空間にクラスが見つからない場合にのみ、クラスを自動読み込みすることができます。ネームスペースをインポートした場合、そのネームスペースで正しく定義されている(含まれている)すべてのクラスを呼び出し可能にする必要があります。 – knittl

+0

これは、参照されるクラス名ごとに、インポートされた名前空間ごとにオートローダーを呼び出す必要があるため、膨大な数のオートロード呼び出しにつながります。自動ロード機能が比較的高価であると仮定すると(ファイルシステムを参照)、これはかなり注目に値する。 – johannes

+0

もちろん、スクリプトの実行中にファイルを含むクラスを作成し、それを使用して(おそらくあまり賢明ではないかもしれませんが)PHPを使用することができます。 – Mchl

0

としては、ヨハネスを説明したり、あなたのクラス

宣言をaliasesすることができます:

use Foo\Bar; 
$o = new Bar\Baz(); // Is Foo\Bar\Baz 

または別名を持つ:あなたは何ができるか

は、サブ名前空間をインポートしています

namespace myNamespace; 

class myClass { 
    public function __toString() 
    { 
     return "Hello world!"; 
    } 
} 

実行:

include 'namespace.class.php'; 

use myNamespace\myClass as myClass; 

echo new myClass(); 
+1

私が求めたものではありません。私は1つのクラスをインポートすることができますが、それは私の問題ではありません。 – knittl

+0

申し訳ありませんが、C#のように名前空間を使用したいと思っていますが、私はジョハネスの説明どおりにはできません。私はエイリアスクラスの技術ではなくサブネームスペースに貢献したいと思っていました。 – corretge