Skip to content

Idea: Start converting older tokenization to php 8.0 T_NAME_QUALIFIED/T_NAME_RELATIVE/T_NAME_FULLY_QUALIFIED #377

@TysonAndre

Description

@TysonAndre

In a new major/0.(x+1) release

On a best effort basis, convert groups of names/keywords/reserved words separated by \ without whitespace to T_NAME_QUALIFIED/T_NAME_RELATIVE/T_NAME_FULLY_QUALIFIED in php < 8.0, do nothing in 8.0+

  • Currently, as a workaround, we do the opposite and split those up, but this makes less sense as php 8.0+ adoption grows (for analysis and for the runtime used for this library)

Related to #362

For parseQualifiedName, we might want to either (1) start treating whitespace as special or (2) start actually supporting T_NAME_QUALIFIED in a subsequent major release in the far future when support for < 8.0 is dropped

  • i.e. start forbidding the rarely used a \ b to prepare for that php 8.0 incompatibility

The motivation to do that is to support the way edge cases such as echo\foo would be parsed in 8.0 in more cases (i.e. not echo \foo) after https://wiki.php.net/rfc/namespaced_names_as_token

php > echo PHP_VERSION_ID;
80017
php > new a \ b();

Parse error: syntax error, unexpected token "\" in php shell code on line 1
php > new a\b();

Warning: Uncaught Error: Class "a\b" not found in php shell code:1
Stack trace:
#0 {main}
  thrown in php shell code on line 1
php > echo\foo();

Warning: Uncaught Error: Call to undefined function echo\foo() in php shell code:1
Stack trace:
#0 {main}
  thrown in php shell code on line 1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions