2011-08-19 10 views
48

Implementuję przestrzenie nazw w moim istniejącym projekcie. Zauważyłem, że możesz użyć słowa kluczowego "użyj" do zaimportowania klas do swojej przestrzeni nazw. Moje pytanie brzmi: czy mogę również zaimportować wszystkie klasy z jednej przestrzeni nazw do drugiej. Przykład:PHP, jak zaimportować wszystkie klasy z innej przestrzeni nazw

namespace foo 
{ 

    class bar 
    { 

     public static $a = 'foobar'; 

    } 

} 

namespace 
{ 
    use \foo; //This doesn't work! 
    echo bar::$a; 
} 

Aktualizacja PHP 7+

Nowością PHP 7 są pogrupowane zgłoszenia. To nie robi to tak proste, jak przy użyciu 1 „oświadczenie użycia” dla wszystkich klas w danej przestrzeni nazw, ale sprawia, że ​​nieco łatwiej ...

Przykładowy kod:

<?php 
// Pre PHP 7 code 
use some\namespace\ClassA; 
use some\namespace\ClassB; 
use some\namespace\ClassC as C; 

// PHP 7+ code 
use some\namespace\{ClassA, ClassB, ClassC as C}; 
?> 

Patrz także: https://secure.php.net/manual/en/migration70.new-features.php#migration70.new-features.group-use-declarations

+1

pamiętajcie, że „importu” nie oznacza, że ​​rzeczywiście można znaleźć tej klasy. Nadal musisz mieć tę klasę dostępną za pomocą instrukcji manualnej lub autoloadera. – Nanne

+1

Oczywiście, ale nie wiem, jak wyrazić to innymi słowami. – Rob

+0

Tak myślałem, ale żeby uniknąć nieporozumień :) – Nanne

Odpowiedz

53

Nie jest to możliwe w PHP.

Wszystko, co można zrobić, to:

namespace Foo; 

use Bar; 

$obj = new Bar\SomeClassFromBar(); 
+7

OK dzięki, szkoda ... – Rob

+2

Lub oczywiście, możesz umieścić konkretne klasy w clausule użytkowania. ('use Bar \ SomeClassFromBar; $ obj = new SomeClassFromBar();') –

+8

O nie, dlaczego PHP nie zapewnia tego ... –

Powiązane problemy