2016-08-15 1 views
0

In einer Laravel 4-Anwendung ist es möglich, einen Controller im Namespace Public zu erstellen? Wie folgt aus:PHP Namespace namens 'Public'

<?php namespace Public; 

class MyController extends \BaseController { 

} 

dies tun gibt mir eine Fehlermeldung:

syntax error, unexpected 'Public' (T_PUBLIC), expecting identifier (T_STRING) or \ (T_NS_SEPARATOR) or '{'

Allerdings, wenn ich den Namespace PublicControllers ändern, es funktioniert gut. Bedeutet das, Public ist ein reserviertes Wort, das nicht als Namespace verwendet werden kann?

+1

Sie * können * einen 'öffentlichen' Namespace erstellen, wenn Sie es wirklich versuchen, aber Sie müssten auf alle Arten von Hacker zurückgreifen, um es zum Laufen zu bringen. (Überall, wo Sie beispielsweise einen Klassennamen verwenden, benötigen Sie eine Zeichenfolgevariable, die den Klassennamen enthält.) Wäre es nicht wert. – cHao

+1

Würde gerne wissen, warum diese Frage 2 downvotes erhalten hat. Es ist eine klare, spezifische Frage und die angenommene Antwort ist sehr informativ. Was ist das Problem? – flyingL123

+0

Ein bisschen spät, aber hier ist eine detaillierte Antwort, die imo sein sollte linkedr: https://Stackoverflow.com/a/44225572/2310637 – MrMAG

Antwort

6

public is a reserved word in PHP:

These words have special meaning in PHP. Some of them represent things which look like functions, some look like constants, and so on - but they're not, really: they are language constructs. You cannot use any of the following words as constants, class names, function or method names. Using them as variable names is generally OK, but could lead to confusion.

Während Namensräume sind hier nicht speziell erwähnt wir the PHP grammar schauen und sehen, dass Namensraum vorgenommen werden erwartet von T_STRING s zusammen mit T_NS_SEPARATOR s verbunden (Schrägstriche). Da public einen eigenen Tokentyp (T_PUBLIC, der in Ihrer Fehlermeldung erwähnt wird) hat, ist es keine geeignete Wahl.

Beachten Sie, dass dies nichts mit Laravel zu tun hat.

+0

Danke, ich bin sicher, dass Sie richtig sind und ich werde weg von diesem Namensraum bleiben Wahl, aber gerade aus Neugier, welche von "Konstanten, Klassennamen, Funktions- oder Methodennamen" ist ein Namensraum? – flyingL123

+0

@ flyingL123, ein Namensraum ist keines dieser Dinge. Bitte sehen Sie meine aktualisierte Antwort. – Chris