1
0
mirror of https://github.com/danog/PHP-Parser.git synced 2024-11-27 12:24:39 +01:00
PHP-Parser/UPGRADE-4.0.md
2017-04-29 13:01:02 +02:00

3.2 KiB

Upgrading from PHP-Parser 3.x to 4.0

PHP version requirements

PHP-Parser now requires PHP 7.0 or newer to run. It is however still possible to parse PHP 5.2-5.6 source code, while running on a newer version.

Changes to the node structure

  • Many subnodes that previously held simple strings now store Identifier nodes instead (or VarLikeIdentifier nodes if they have form $ident). The constructors of the affected nodes will automatically convert strings to Identifiers and Identifiers implement __toString(). As such some code continues to work without changes, but anything using is_string(), type-strict comparisons or strict-mode may require adjustment. The following is an exhaustive list of all affected subnodes:

    • Const::$name
    • NullableType::$type (for simple types)
    • Param::$type (for simple types)
    • Expr\ClassConstFetch::$name
    • Expr\Closure::$returnType (for simple types)
    • Expr\MethodCall::$name
    • Expr\PropertyFetch::$name
    • Expr\StaticCall::$name
    • Expr\StaticPropertyFetch::$name (uses VarLikeIdentifier)
    • Stmt\Class_::$name
    • Stmt\ClassMethod::$name
    • Stmt\ClassMethod::$returnType (for simple types)
    • Stmt\Function::$name
    • Stmt\Function::$returnType (for simple types)
    • Stmt\Goto_::$name
    • Stmt\Interface_::$name
    • Stmt\Label::$name
    • Stmt\PropertyProperty::$name (uses VarLikeIdentifier)
    • Stmt\TraitUseAdaptation\Alias::$method
    • Stmt\TraitUseAdaptation\Alias::$newName
    • Stmt\TraitUseAdaptation\Precedence::$method
    • Stmt\Trait_::$name
    • Stmt\UseUse::$alias
  • Expression statements (expr;) are now represented using a Stmt\Expression node. Previously these statements were directly represented as their constituent expression.

  • The name subnode of Param has been renamed to var and now contains a Variable rather than a plain string.

  • The name subnode of StaticVar has been renamed to var and now contains a Variable rather than a plain string.

  • The var subnode of ClosureUse now contains a Variable rather than a plain string.

  • The var subnode of Catch now contains a Variable rather than a plain string.

  • The alias subnode of UseUse is now null if no explicit alias is given. As such, use Foo\Bar and use Foo\Bar as Bar are now represented differently. The getAlias() method can be used to get the effective alias, even if it is not explicitly given.

Removed functionality

  • Removed type subnode on Class, ClassMethod and Property nodes. Use flags instead.
  • The ClassConst::isStatic() method has been removed. Constants cannot have a static modifier.
  • The NodeTraverser no longer accepts false as a return value from a leaveNode() method. NodeTraverser::REMOVE_NODE should be returned instead.
  • The Node::setLine() method has been removed. If you really need to, you can use setAttribute() instead.
  • The misspelled Class_::VISIBILITY_MODIFER_MASK constant has been dropped in favor of Class_::VISIBILITY_MODIFIER_MASK.
  • The XML serializer has been removed. As such, the classes Serializer\XML, and Unserializer\XML, as well as the interfaces Serializer and Unserializer no longer exist.