Re: Namespaces in Core
| From: | Fleshgrinder | Date: | Tue, 07 Feb 2017 17:30:24 +0000 |
| Subject: | Re: Namespaces in Core | ||
| References: | 1 2 3 4 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-98247@lists.php.net to get a copy of this message | ||
On 2/7/2017 11:39 AM, Niklas Keller wrote:
> I don't see this as a potential problem. Autoloadeds are (1) not triggered
> for already loaded symbols and (2) and more importantly, autoloaders
> usually use a list of prefixes to load, so a whitelist, not a blacklist.
>
> Regards, Niklas
>
This is related to previous discussions about the implementation of
auto-loaders for functions and constants where we it was always a
problem on how to deal with stuff that has no use statement and no
namespace prefix, e.g.:
<?php
namespace Fleshgrinder\Examples;
in_array('foo', ['foo']);
Is this now the
in_array() from PHP? Is this function defined in
Fleshgrinder\Examples?
One way to resolve this is:
<?php
namespace Fleshgrinder\Examples;
\in_array('foo', ['foo']);
This is unambiguous and clear, we have that one loaded already and
everything is fine. However, it introduces a backslash oriented
programming and makes everything harder to read.
<?php
namespace Fleshgrinder\Examples;
use function PHP\in_array;
in_array('foo', ['foo']);
This solves the issue too. Of course this becomes annoying very fast but
that is why I said that nikic's scalar objects should be introduced as well.
<?php
namespace Fleshgrinder\Examples;
['foo']->contains('foo');
In all cases, we know that the auto-loader does not require triggering
because the references are not ambiguous and that is what this was about.
--
Richard "Fleshgrinder" Fussenegger