Scott,

On Fri, Dec 4, 2015 at 11:26 AM, Scott Arciszewski <sc...@paragonie.com> 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

Reply via email to