2012-08-03 9 views
16

Ich frage mich, ob in der Situation, in der ich eine Klasse erweitern, die bereits 'verwenden' Schlüsselwort über es spezifischen Namespace verwenden muss - muss ich ein anderes 'verwenden' über die erbende Klasse hinzufügen, um den gleichen Namespace zu verwenden? Situation wie folgt aus:PHP: Benötigt Erweiterungsklasse eine andere "Verwendung", um Namespace aufzurufen?

namespace Core; 

use System\Plugin; 

class Front extends Application { } 

und jetzt im Controller, die ohne den Namensraum (mit vollständigen Pfad) direkt aufgerufen wird:

use System\Plugin; 

class PageController extends Front { } 

oder würde es auch ohne ‚Verwendung‘ arbeiten und mir erlauben, Verwenden Sie den Namespace System \ Plugin:

class PageController extends Front { } 

?

Antwort

18

Nein, Sie brauchen die Anweisung "use" in beiden Dateien. Use ist ein Schlüsselwort auf Dateiebene und nicht von der Vererbung betroffen.

Sehen Sie die scoping rules for importing und die kleine Box beschreibt, was ich am Ende der Handbuchseite gesagt habe.

+0

Offensichtlich, wenn ich innerhalb der Front-Klasse ein Objekt aus dem Plugin-Namespace instanziiert habe, kann ich es ohne die Verwendung von System \ Plugin in der geerbten Klasse verwenden. –

+0

Natürlich, und Sie brauchen auch nicht immer eine Verwendung Aussage. Die Verwendung des vollqualifizierten Namensraums funktioniert ebenfalls. – Lusitanian

+6

Es wäre nett (d. H. DRYer), wenn Klassen 'Use'-Anweisungen von Elternklassen erben könnten – hohner