* I think most code actually using strict_types=1 is built with the
assumption that internal functions use strict too, so it's entirely
possible that the backwards-compatibility issue is so small that we
can get away with internal functions just inheriting the userland
strict_types

On Tue, 29 Aug 2023 at 18:36, Hans Henrik Bergan <divinit...@gmail.com> wrote:
>
> maybe we could do a
> declare(internal_strict_types=1);
> on a per-file basis just like the existing userland strict_types?
> (name is up for bikeshedding ofc)
>
> On Tue, 29 Aug 2023 at 17:49, Claude Pache <claude.pa...@gmail.com> wrote:
> >
> >
> >
> > > Le 29 août 2023 à 15:19, Saki Takamachi <s...@sakiot.com> a écrit :
> > >
> > >> Hi,
> > >>
> > >> The larger issue is that higher-order functions do not inherit the 
> > >> `strict_types` mode from its calling code, and this is not specific to 
> > >> internal functions.
> > >>
> > >> If you intend to change that for internal functions (with proper 
> > >> deprecation period, of course), you might consider making such a 
> > >> behaviour also possible for userland functions (probably using some 
> > >> opt-in); so that future higher-order internal functions do not become 
> > >> impossible to polyfill.
> > >>
> > >> —Claude
> > >
> > > Hi, thank you for confirming.
> > >
> > > If you simply put the problem you pointed out in the code, would it be 
> > > something like this?
> > > https://gist.github.com/SakiTakamachi/8292dbfe92a2029a6c7b506b12296b7d
> > >
> > > Admittedly, I don't think this is intuitive either.
> >
> > That might not be intuitive to you, but it follows directly from the 
> > specified semantics: whether a function is called in `strict_types` mode or 
> > not, depends only on where the function is called. I personally doubt that 
> > there is an easy way to adjust the rule in order to make it both 
> > “intuitive” and simple.
> >
> > >
> > > [...]
> > >
> > > When considering the inheritance of strict_types, I think that it should 
> > > be an attribute that can be set in “php.ini" instead of being specified 
> > > for each file.
> > >
> > > What do you think?
> >
> > Beware that there are many third-party packages that have not opted for 
> > `strict_types=1`; if you enable that mode globally, you might make those 
> > packages malfunction.
> >
> > As I have just checked, among the packages I’ve installed via composer, 
> > there are more packages that do not use `strict_types=1`, than packages 
> > that use it. Among those that don’t use `strict_types`, the following ones 
> > are fairly common:
> >
> > google/apiclient
> > league/oauth2-client
> > michelf/php-markdown
> > microsoft/microsoft-graph
> > phpmailer/phpmailer
> > phpoffice/phpspreadsheet
> > phpseclib/phpseclib
> >
> > —Claude
> >
> > --
> > PHP Internals - PHP Runtime Development Mailing List
> > To unsubscribe, visit: https://www.php.net/unsub.php
> >

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

Reply via email to