2016-09-28 5 views
0

Als Züge sind effektiv Kopieren/Einfügen Code, den ich erwartet hatte:PHP __NAMESPACE__ in Zug

__NAMESPACE__ 

den Namensraum der Klasse liefern es zu benutzen.

Leider scheint es für mich, den Namensraum des Merkmals zur Verfügung zu stellen.

Warum ist das?

+1

"Als Merkmale sind effektiv Code kopieren/einfügen ..." Nein, sie sind nicht. –

+0

@KaloyanDoichinov Danke, das scheint ein beliebter Weg zu sein, sie zu konzeptualisieren, der nicht ganz genau ist! – Arth

Antwort

2

__NAMESPACE__ enthält den Namensraum wo der Code geschrieben wurde, in dem __NAMESPACE__ erscheint. Es hat "buchstäblichen Spielraum", soweit dieses Konzept hier gilt. Dasselbe gilt für Funktionen, die Sie innerhalb anderer Namespaces oder Objekte aufrufen, die Sie in anderen Namespaces instanziieren. Sie beziehen sich alle auf ihren eigenen ursprünglichen Namespace, nicht auf den, in dem der Code gerade ausgeführt wird.

Namensräume beeinflussen wirklich nur Namen, Kennzeichnungen. dies für alle Absichten und Zwecke:

namespace Foo\Bar; 

class Baz {} 

ist nur eine Abkürzung für:

class Foo\Bar\Baz {} 

, die für alle Absichten und Zwecke ist äquivalent zu:

class Foo_Bar_Baz {} 

Namespaces werden nicht zur Laufzeit aufgelöst oder sie haben einen wirklichen Einfluss auf die Laufzeit, sie dienen lediglich dazu, Namen zu präfixisieren, während sie immer noch eine kurze Syntax erlauben und nicht ständig lange Namen schreiben müssen.

__NAMESPACE__ bezieht sich auf das "Name Präfix" der aktuellen Entität, wie Foo_Bar oben; nicht mehr, nicht weniger.

+0

OK, cool, das macht eigentlich Sinn. Ein Merkmal ist also in diesem Zusammenhang nicht genau das Kopieren/Einfügen. – Arth

+1

Nicht mehr als das Erweitern einer Klasse oder das Hinzufügen einer .php-Datei. – deceze

1

Sie rufen es aus dem Kontext einer Methode innerhalb des Merkmals selbst auf, daher ist es völlig logisch, dass es den Namensraum des Merkmals zurückgibt.

Wenn Sie tatsächlich fragen, wie Sie den Namespace der Klasse erhalten, werfen Sie einen Blick auf here.