Re: Namespaces

From: Date: Fri, 04 Dec 2015 16:52:44 +0000
Subject: Re: Namespaces
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-89622@lists.php.net to get a copy of this message
Scott, On Fri, Dec 4, 2015 at 11:26 AM, Scott Arciszewski <scott@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

« previous php.internals (#89622) next »