Scott,
On Fri, Dec 4, 2015 at 11:26 AM, Scott Arciszewski <[email protected]> wrote:
> Hi,
>
> It has been brought to my attention that my consistent use of \ prefixing
> of global functions is an eyesore, but I've got a simple little PoC that
> shows why I do it, and now I'm wondering if the behavior I'm working around
> should qualify as a PHP bug?
>
> https://3v4l.org/po925
>
> Scott Arciszewski
> Chief Development Officer
> Paragon Initiative Enterprises <https://paragonie.com>
It's not a bug. It's explicit. The `\` prefix says it's a global
function. The non-prefixed looks in the current namespace and then
falls back to global.
Also, in PHP 5.6+ you can do something slightly different to achieve
the same result: use function.
namespace Foo {
use function random_int;
var_dump(random_int(1, 100));
var_dump(\random_int(1, 100));
}
That will always behave the same no matter if someone defines a
namespace-specific random_int function, it will always use the global
version.
https://3v4l.org/cR6Gg
This actually opens a pretty interesting edge-case, where you can
define a function in the namespace and use the global one without
needing a "\".
namespace Foo {
use function strlen;
function strlen(string $str) : int {
return strlen($str) + 1;
}
}
That actually is not recursive. This is a bit non-obvious, but
completely follows the rules set forth. So I don't think there's a bug
(though we may want to raise a notice in that collision case)...
Anthony
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php