Re: Re: [RFC] "use global functions/consts" statement

From: Date: Fri, 24 Jan 2020 17:58:50 +0000
Subject: Re: Re: [RFC] "use global functions/consts" statement
References: 1 2 3 4 5 6 7 8 9  Groups: php.internals 
Request: Send a blank email to internals+get-108230@lists.php.net to get a copy of this message
> > One option that I haven't seem much discussion on is the opposite: Always > only look in the global namespace. Any unimported unqualified usages will > > be treated as fully qualified names. This would match the proposed > > semantics for functions/consts and change the resolution rules for classes. > > > > I think this would have relatively little impact on how code is written, as > > classes already tend to make extensive use of cross-namespace references > > and the import is usually IDE managed. > > Quick reaction: that'd make sense to me! > > Adding a "use CurrentNamespace\Foo" or using "namespace\Foo" looks easy > enough to adopt. > Does this mean you're suggesting to use > declare(symbol_lookup='global')? Or shorter: declare(lookup='global'), or > maybe even declare(global_lookup=1) as I'm not sure we need 3 options here? The RFC has been updated after feedback, but I forgot to update the wiki and PR title. I sent out an email last week mentioning that https://wiki.php.net/rfc/use_global_elements is now a single declare() setting declare(function_and_const_lookup=global) > Always only look in the global namespace. Other RFCs have proposed that approach. I mentioned the objections others had to that RFC in https://wiki.php.net/rfc/use_global_elements#deprecate_the_fallback_to_the_root_namespace_instead "Deprecating the behavior of existing code would break (possibly unmaintained) third-party libraries and require a lot of code changes, discouraging updates to the latest version of PHP." > I like the idea of using a meaningful value here, but think that this > should be using a string, i.e. declare(function_and_const_lookup='global') > rather than declare(function_and_const_lookup=global). Currently declare() > syntax uses a normal constant expression on the right hand side of the =, > and I don't see a strong reason why we should deviate from that for this > feature. An existing declare using a string is declare(encoding='UTF-8'). Whether it's quoted is a low priority to me - I went with the unquoted implementation because it might be something repeated in every file of a project, and it'd be slightly more convenient to avoid quotes and use keywords if there were many more settings with different values (=on, =off, =warning, etc) in the future. A difference is that it makes sense to quote encodings such as UTF-8 because of the '-', but not as much to quote keywords without special characters. > It looks like the implementation has been updated to the style proposed > here, while the RFC still uses disable_ambiguous_element_lookup. Fixed, forgot to update the wiki after updating the implementation

« previous php.internals (#108230) next »