Re: [PATCH] allowing multiple namespaces per file plus namespaces with brackets
| From: | Gregory Beaver | Date: | Tue, 21 Aug 2007 21:31:44 +0000 |
| Subject: | Re: [PATCH] allowing multiple namespaces per file plus namespaces with brackets | ||
| References: | 1 2 3 4 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-31816@lists.php.net to get a copy of this message | ||
Stanislav Malyshev wrote:
>> that if you try to "combine" two files that contain import statements,
>> it will be necessary to expand the imports. Fortunately, since
>
> What do you mean by "expand"?
>
>> import allows aliasing specific namespaced files and classes within a
>> file. For example:
>
> But import has nothing to do with files. import works on names, not files.
s/files/functions/ I mis-typed and didn't notice, sorry.
>> <?php
>> namespace foo {
>> class bar {}
>> }
>> import foo::bar;
>> namespace gronk {
>> class bar {}
>> }
>> ?>
>>
>> Fatal error: Class name 'bar' coflicts with import name
>
> Ouch! So I can't actually combine namespaces from different areas -
> how I'm supposed to know when I write "gronk" that somebody is going
> to stick this code into the context that already has the name "bar" in
> it? It's exactly the problem namespaces are meant to solve! Moreover,
> if you take two files with working code and copy-paste them into one
> file, they have a lot of chance of stopping working. If this isn't
> confusion, I don't know what is.
Careful Stas :), you probably missed the "import foo::bar;" This code
works just fine:
<?php
namespace foo {
class bar {}
}
namespace gronk {
class bar {}
}
?>
No fatal errors, everybody is happy. The problem is importing the "bar"
identifier. This code also fails with the same fatal error for the same
reason:
file1.php:
<?php
namespace foo;
class bar {}
?>
file2.php:
<?php
namespace gronk;
import foo::bar;
class bar {}
?>
>> That will clear up any possible confusion.
>
> No, on the contrary - it would create a lot of confusion, since now
> you can break namespaced code with code outside namespace, which
> wasn't supposed to happen by definition.
It still doesn't. As I pointed out above, the same error is possible
with the current implementation pre-my patch.
>> Well it kind of makes namespaces behave more like namespaces, don't you
>
> Please stop this "only C++ implementation is right" thing.
I don't care about C++. I'm only talking about the patch I proposed.
Thanks,
Greg