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.
2. Certain features, can be restricted to php-header files only, meaning it
does not affect
   "normal" PHP files. This might open up a whole new range of syntax
possibilities that
   are currently blocked, such as `@trigger_error()` vs `@Annotation()`.

I can understand if those reasons are not enough to merit a whole new
concept as a header
file as it might introduce more complexity than it's worth.

Regards,
Lynn van der Berg


On Fri, May 10, 2019 at 2:37 PM Nikita Popov <nikita....@gmail.com> wrote:

> On Fri, May 10, 2019 at 2:30 PM Lynn <kja...@gmail.com> wrote:
>
>> Hello everyone!
>>
>> This is my first mail to the internals, my apologies if I made a mistake
>> somewhere.
>>
>> I would like to propose a new type of php "file" called "phph", short for
>> "php-header".
>> This file could receive an optional open-tag: `<?phph` or perhaps a
>> `declare(header=1)`,
>> not sure what's more feasible, or if there are better solutions. This open
>> tag could be
>> optional for forward compatibility towards omitting the tag.
>>
>> Php-header files would be allowed to only contain declaring code. This
>> means that any code
>> that would run "while loading", would not be allowed and cause a syntax
>> error in the same
>> fashion as trying to add a function call in the middle of a class
>> declaration.
>>
>> ```php
>> <?php
>> // forward compatible? change default in a major version?
>> // any other ideas?
>> declare(header=1);
>>
>> // syntax errors:
>> echo 'foo';
>> $a = 'b';
>>
>> // valid
>> class Foo {}
>> interface Bar {}
>> function baz() {}
>> // etc
>> ```
>>
>> By restricting it to declaration only, it would make it possible to add
>> extra features to
>> classes, such as annotations as there are a lot less edge cases to think
>> about:
>>
>> ```php
>> <?php
>> @trigger_error('Foo is deprecated as of 2.0, use Bar instead',
>> E_USER_DEPRECATED);
>> class Foo {}
>> ```
>>
>> New scenario could be:
>> ```php
>> <?php
>> declare(header=1);
>>
>> use Php\Debugging\Annotations\Deprecated;
>>
>> @Deprecated('Foo is deprecated as of 2.0, use Bar instead');
>> class Foo {}
>> ```
>>
>> This is a pretty rough sketch, and I'm not exactly sure if this is doable.
>> I'm really eager
>> to have native support for annotations and perhaps this idea could inspire
>> someone with a
>> solution to make this feasible.
>>
>> Regards,
>> Lynn van der Berg
>>
>
> Hi Lynn,
>
> I'm not sure I understood what the benefit of introducing a header file
> concept will be. Could you elaborate more on how this will help annotations
> (or other functionality)?
>
> Nikita
>

Reply via email to