> -----Ursprüngliche Nachricht-----
> Von: Rowan Collins [mailto:rowan.coll...@gmail.com]
> Gesendet: Donnerstag, 13. November 2014 11:57
> An: internals@lists.php.net
> Betreff: Re: AW: [PHP-DEV] forbid use declaration outside of a namespace in 
> PHP 7
> 
> Robert Stoll wrote on 12/11/2014 21:27:
> 
> > That's still perfectly fine because in your code the use statement is not 
> > outside of a namespace, it is implicitly in the
> default namespace.
> 
> Surely if that's true of Adam's example, it's true of yours as well?

[Robert Stoll] 
The difference is that I have specified a namespace and thus code outside of 
that namespace is no longer implicitly in the default namespace.

> > namespace a{
> > }
> >
> > use some\UseDeclaration\which\is\outside\of\AnyNamespace as Useless;
> > // sorry for begin biased ^^
> >
> > namespace test{
> > }
> 
> This scenario looks identical to Adam's to me, unless you propose to look at 
> the entirety of the file to detect if there is
> something other than a use statement in the default namespace.

[Robert Stoll] 
Same applies here, my use statement is outside of a namespace Adam's isn't.

> For that matter, what about this:
> 
> use GuzzleHttp\Client;
> 
> include __DIR__.'/vendor/autoload.php';
> 
> $client = new Client;
> // $client is a GuzzleHttp\Client object
> 
> namespace Foo;
> $client = new Client;
> // $client is a Foo\Client object
> 
> Certainly this code is not *sensible*, but it does have a meaningful 
> behaviour, which derives directly from the previous
> examples and documented uses of the namespace keyword. I'm not sure how you'd 
> distinguish between the various
> combinations here.
> 
> Regards,
> --
> Rowan Collins
> [IMSoP]
> 

[Robert Stoll]
I haven't tested it I am pretty sure this script would fail since $client = new 
Client is outside of a namespace - an error message something like "namespace 
must be the first statement" would show up.
If I rewrite your code to the following:

namespace{
  use GuzzleHttp\Client;
 
  include __DIR__.'/vendor/autoload.php';
 
  $client = new Client;
  // $client is a GuzzleHttp\Client object
  
namespace Foo{
  $client = new Client;
  // $client is a Foo\Client object
}

Then it would make sense (use statement is inside a namespace).


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to