On Mon, May 13, 2019, at 7:49 AM, Johannes Schlüter wrote:
> On Fr, 2019-05-10 at 15:14 +0200, Lynn wrote:
> > Hi Nikita,
> >
> > By limiting a header file to declaring code only, a couple of issues
> > could
> > be tackled:
> >
> > 1. No side effects when loading files. You can assume the global
> > state
> > remains the same, no
> > code is executed by this file, and no output can be sent.
>
> Mind that this won't be side-effect free. Declaring a class/function is
> a side-effect in itself.
>
> For dealing with syntax differences we could use the declare()
> statement, as used for strict_types or encoding.
>
> A question is whether it is worthwhile to have multiple syntaxes in
> parallel. This adds burden for developers using PHP, (i.e. copying code
> from tutorials or other files might fail sometimes etc.) tools
> processing PHP (IDEs, code analyzers, ...) and language developers (new
> syntax changes have to be evaluated for both contexts)
>
> If this were a strategy to transition to a new syntax (deprecating "old
> PHP") such a mechanism would be the way to go. For just having
> alternatives to avoid a syntax conflict cost imo is too big.
>
> johannes
Another possible place such a marker could be useful is in the new preloading
functionality in 5.4. Any file that is preloaded is going to never execute
again, ever. That means preloading a file that has both symbol declarations
and executing global code could lead to weird results. I could see a preloader
that would only try to preload symbol-only files.
That said... most polyfill files, of which there are a decent number, do some
variation on:
<?php
if (!function_exists('coolness')) {
function coolness(int $coolLevel) { ... }
}
?>
Which would then be incompatible with such a check, yet are perfectly valid to
preload; maybe even an especially good case for preloading. So such a strict
check is probably unwise.
Maybe it would be helpful for the various experimental "precompile PHP"
efforts, like what Anthony Ferrara has been doing? I've no idea there.
I appreciate the intent here, and agree most code files should be symbol-only,
but I'm not sure there's a strong enough use case in practice for it. That
said, were it to be adopted I would strongly favor a declare rather than a
different file extension or tag. Something like:
<?php
declare('strict_types=1');
declare('this file only declares symbols, error if it tries to do anything
else');
class Blah { ...}
?>
That would be the least obtrusive way of adding it, I think.
--Larry Garfield
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php