Re: Use declaration outside of namespace
| From: | Chris Wright | Date: | Wed, 29 Oct 2014 14:04:47 +0000 |
| Subject: | Re: Use declaration outside of namespace | ||
| References: | 1 2 3 | Groups: | php.standards |
| Request: | Send a blank email to standards-+get-531@lists.php.net to get a copy of this message | ||
On 29 October 2014 13:53, Robert Stoll <php@tutteli.ch> wrote:
> > -----Ursprüngliche Nachricht-----
> > Von: are.you.winning@gmail.com [mailto:are.you.winning@gmail.com] Im
> Auftrag von Chris Wright
> > Gesendet: Mittwoch, 29. Oktober 2014 13:38
> > An: Robert Stoll
> > Cc: standards@lists.php.net
> > Betreff: Re: [STANDARDS] Use declaration outside of namespace
> >
> > On 29 October 2014 09:12, Robert Stoll <php@tutteli.ch> wrote:
> >
> > > Heya,
> > >
> > > I always found it very ugly that it is possible to define a use
> > > outside of a namespace. Consider the following:
> > >
> > > use foo\Bar;
> > > namespace test;
> > > new Bar(); //error, test\Barnot found
> > >
> > > I do not see why we should actually support this behaviour in the
> > > specification of PHP. I do not see it as a bug in the current PHP
> > > implementation but I think we should consider to remove it in PHP 7.
> > > Although, it is not a bug, the use declaration is simply ignored as
> > > far as I can tell, but I suppose it confuses the user. Nevertheless,
> > > even if we declare it as a "feature" I think it should not be a
> > > "feature" of the specification.
> > >
> > > Thoughts?
> > >
> > >
> > TL;DR if you revise wording of the suggested change from "outside of a
> namespace" to "before a namespace declaration",
> > +1
> >
> > Removing the ability "use" things outside a namespace is not acceptable
> to me. I have often written quick scripts that use
> > things from many namespaces but don't belong in a specific namespace,
> and in those cases I usually don't declare a
> > namespace (it's also worth noting that you're never "outside a
> namespace", you're just in the root namespace by default).
> >
> > That said, placing the "use" statements before the namespace declaration
> doesn't make a whole bunch of sense and
> > should probably be explicitly disallowed. The fact that it works in
> php-src at the moment is arguably an oversight, if you try
> > to actually *do* anything before the namespace declaration you even get
> an error stating that it "has to be the very first
> > statement in the script" - so this case should probably be disallowed.
> >
> > Thanks, Chris
> >
> >
> > > Cheers,
> > > Robert
> > >
> > >
>
> To be clear on this. I am not speaking about statements "outside" of a
> namespace (which is not possible as you mentioned as well). I am speaking
> about "use declarations" outside of a namespace and with outside I mean
> actually outside.
>
> As you mentioned, when one tries to do the following
>
> $a = 1;
> namespace test;
>
> This will fail because $a is outside of a namespace (you will get the
> error message "Namespace declaration statement has to be the very first
> statement in the script")
> Maybe it was not clear enough, so I am going to rewrite my example to be
> clearer:
>
> namespace{ //default namespace
> $a = 1;
> }
> use foo\Bar;
> namespace test{
> new Bar();
> }
>
> I hope that clears things up.
>
>
It does, this example does indeed place something *outside* a namespace,
and I am quite surprised that PHP doesn't bork at this already. I would
hope no-one would ever write code like this anyway, but I'm sure I would be
disappointed.
> Cheers,
> Robert
>
>