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.
HHVM is no longer actively supported.
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_::$nameNullableType::$type (for simple types)Param::$type (for simple types)Expr\ClassConstFetch::$nameExpr\Closure::$returnType (for simple types)Expr\MethodCall::$nameExpr\PropertyFetch::$nameExpr\StaticCall::$nameExpr\StaticPropertyFetch::$name (uses VarLikeIdentifier)Stmt\Class_::$nameStmt\ClassMethod::$nameStmt\ClassMethod::$returnType (for simple types)Stmt\Function_::$nameStmt\Function_::$returnType (for simple types)Stmt\Goto_::$nameStmt\Interface_::$nameStmt\Label::$nameStmt\PropertyProperty::$name (uses VarLikeIdentifier)Stmt\TraitUseAdaptation\Alias::$methodStmt\TraitUseAdaptation\Alias::$newNameStmt\TraitUseAdaptation\Precedence::$methodStmt\Trait_::$nameStmt\UseUse::$aliasExpression 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.
pNoindent(). Now no-indent is the default and newlines that require indentation should use
$this->nl.type subnode on Class_, ClassMethod and Property nodes. Use flags instead.ClassConst::isStatic() method has been removed. Constants cannot have a static modifier.NodeTraverser no longer accepts false as a return value from a leaveNode() method.
NodeTraverser::REMOVE_NODE should be returned instead.Node::setLine() method has been removed. If you really need to, you can use setAttribute()
instead.Class_::VISIBILITY_MODIFER_MASK constant has been dropped in favor of
Class_::VISIBILITY_MODIFIER_MASK.Serializer\XML, and
Unserializer\XML, as well as the interfaces Serializer and Unserializer no longer exist.BuilderAbstract class has been removed. It’s functionality is moved into BuilderHelpers.
However, this is an internal class and should not be used directly.Autoloader class has been removed in favor of relying on the Composer autoloader.