问题
PhpStorm is highlighting the following namespace as an error.
<?php
namespace App\Http\Controllers\Public;
Error: Expected: identifier
In general. Are reserved keywords like public
, function
, class
not acceptable for namespacing?
回答1:
The PHP manual hints that as of PHP 7.0.0 these keywords are allowed as property, constant, and method names of classes, interfaces and traits, except that class may not be used as constant name, which also incorporate the requested keyword public
.
List of reserved keywords, which you can't use for namespacing:
__halt_compiler
, abstract
, and
, array
, as
, break
, callable
, case
, catch
, class
, clone
, const
, continue
, declare
, default
, die
, do
, echo
, else
, elseif
, empty
, enddeclare
, endfor
, endforeach
, endif
, endswitch
, endwhile
, eval
, exit
, extends
, final
, for
, foreach
, function
, global
, goto
, if
, implements
, include
, include_once
, instanceof
, insteadof
, interface
, isset
, list
, namespace
, new
, or
, print
, private
, protected
, public
, require
, require_once
, return
, static
, switch
, throw
, trait
, try
, unset
, use
, var
, while
, xor
A potential workaround to fix this issue is to add an extra character to the word or use the plural form of the word. Another opportunity would be to go one level up in the namespace and use the keyword as a prefix PublicFooController
. (or even suffix, if you prefer that)
My intention was to scope my web app into public
(for guests and visitors) and private
(for private needs) area.
I went for namespace App\Http\Controllers\Frontend
and namespace App\Http\Controllers\Backend
instead of trying to incorperate the words public
and private
in to my namespacing, even if I personally think these generally fits better to my needs, because both have frontend and backend. But... Anyway, this keeps me off having trouble organizing my files and namespaces the way I would do, when I would use public
and private
.
来源:https://stackoverflow.com/questions/44219644/php-reserved-keywords-allowed-in-namespace-public-private-default