> Le 28 nov. 2019 à 12:56, Rowan Tommins <rowan.coll...@gmail.com> a écrit :
> 
> On Thu, 28 Nov 2019 at 11:01, Claude Pache <claude.pa...@gmail.com> wrote:
>> I think it is better to keep the language as regular as possible, and
> consider that every non-fully-qualified name is relative to the current
> namespace, unless there is an explicit `use` declaration that says otherwise
> 
> That's already false, and will only be true if we deprecate and remove the
> fallback to global scope.
> 
> 
>> use function *; // don't know what this does, but apparently it's good for
>>> performance ¯\_(ツ)_/¯
>> 
>> Or: “don't know what this does, but apparently it silences deprecation
>> notices...”
>> 
> 
> 
> Silencing deprecation notices is always a temporary side-effect of fixing
> code to work *at all* in some future release. Or rather, it should be - I
> am 100% against any notion of "indefinitely deprecated and may never be
> removed", that should always be some other type of notice.
> 
> If we were deprecating unqualified functions from being looked up in the
> current namespace, we would not need to add this new directive, we could
> raise deprecation notices whenever the current lookup logic succeeded in
> finding a namespaced function. Silencing the deprecation notice would
> require either fully qualifying the function name, or explicitly adding a
> "use" statement.
> 
> 
> 
> The issue indeed is that the meaning is far from self-evident. Maybe one
>> could use something that everyone and their mother could understand at
>> first reading, such as:
>> 
>> use function from global namespace;
>> 
> 
> 
> That still doesn't really explain what's happening, because in code that
> doesn't use any namespaced functions, the line has no user-visible effect
> at all - functions are *always* used from the global namespace. What it
> actually does is switch *off* a language feature, so perhaps it should be
> something more like:
> 
> declare(lookup_functions_in_current_namespace=false);
> 
> That would also mean that it can be covered by any future way of setting
> language directives, such as settings per "module", bundling into
> "editions", etc.
> 
> Regards,
> -- 
> Rowan Tommins
> [IMSoP]


I wasn’t clear enough in my previous post: I was assuming that the ultimate 
goal was to remove (after deprecation) the fallback to global namespace. In 
that regard, the `use function *` declaration (or whatever variation of that) 
is both a way to programmer to say the preferred semantics regarding 
not-fully-qualified function names, and a tool to let most legacy scripts 
survive without too much effort.

But probably I made a too strong assumption about the intended goal of the 
proposed feature?

—Claude

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to