> On Oct 20, 2019, at 7:28 AM, Rowan Tommins <rowan.coll...@gmail.com> wrote:
> On 20/10/2019 01:39, Mike Schinkel wrote:
>> Not yet having experience working on PHP's parser I do not know how it is 
>> configured nor what about the design of PHP requires keywords unable to be 
>> used as constants, class names, function or method names. I know this is a 
>> tangent but that seems like a requirement designed to simplify the parser 
>> maybe, and not because of any logical requirement. So I assume whatever word 
>> was used for this would also have to be a reserved keyword?  Or not?
> 
> 
> I don't know the full implications in the parser, but at the language level, 
> any constant can technically appear where this keyword would. That is, the 
> following is valid right now:
> 
> const fallthrough=null;
> fallthrough;
> 
> It doesn't do anything, but it's valid because any expression on its own is a 
> valid statement, and a constant on its own is a valid expression.

Thank you for clarifying that.

Still, I wonder if a reserved word really needs to disallow function, method, 
class and trait names, which are more problematic to me.  I have often wanted 
to name a class 'List`.  And I have often wanted to name a method `do()`, 
`continue()`, `end()` and `try()`.  

Seems like a needless limitation thus forcing the use of less appropriate 
symbol naming.

> Interestingly, that actually makes a single keyword *more* appealing to me, 
> because it means you can get *forwards* compatibility by writing this:
> 
> if ( PHP_VERSION < 80000 && ! defined('fallthrough') ) {
>     define('fallthrough', null);
> }

Oh, that is interesting! 

Too bad you can't define a constant to call an initializer method.

-Mike

Reply via email to