On Fri, 23 Aug 2024, at 10:58, Stephen Reay wrote: > In a world where global functions take precedence over local ones > because some people don't like writing a single \ character, > autoloading would be a moot point because if you preference global > functions you're implicitly telling developers they shouldn't write > namespaced functions, by making them harder and less intuitive to use.
Sorry to reply to the same message twice, but as a concrete example, consider this code: // Definition namespace Acme\Foo; class Utils { public static function magic(string $x): int { return \strlen($x); } public static function more_magic(string $x): int { return self::magic($x) * 2; } } // Caller namespace Acme\MyApp\SearchPage; use Acme\Foo\Utils; echo Utils::more_magic($_GET['query']); Rewritten as namespaced functions, with current PHP: // Definition namespace Acme\Foo\Utils; function magic(string $x): int { return strlen($x); } function more_magic(string $x): int { return magic($x) * 2; } // Caller namespace Acme\MyApp\SearchPage; use Acme\Foo\Utils; echo Utils\more_magic($_GET['query']); With "unqualified names are global", but a new "_\" shorthand for "relative to current", the caller is completely unaffected, but the definition becomes: namespace Acme\Foo\Utils; function magic(string $x): int { return strlen($x); } function more_magic(string $x): int { return _\magic($x) * 2; } Note how the "_\" is used in all the same places as "self::" was in the "static class" version. With "unqualified names are local", the change is very similar, but "the other way around": namespace Acme\Foo\Utils; function magic(string $x): int { return \strlen($x); } function more_magic(string $x): int { return magic($x) * 2; } Regards, -- Rowan Tommins [IMSoP]