3.9 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.
HHVM is no longer actively supported.
Changes to the node structure
- 
Many subnodes that previously held simple strings now store
Identifiernodes instead (orVarLikeIdentifiernodes if they have form$ident). The constructors of the affected nodes will automatically convert strings toIdentifiers andIdentifiers implement__toString(). As such some code continues to work without changes, but anything usingis_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(usesVarLikeIdentifier)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(usesVarLikeIdentifier)Stmt\TraitUseAdaptation\Alias::$methodStmt\TraitUseAdaptation\Alias::$newNameStmt\TraitUseAdaptation\Precedence::$methodStmt\Trait_::$nameStmt\UseUse::$alias
 - 
Expression statements (
expr;) are now represented using aStmt\Expressionnode. Previously these statements were directly represented as their constituent expression. - 
The
namesubnode ofParamhas been renamed tovarand now contains aVariablerather than a plain string. - 
The
namesubnode ofStaticVarhas been renamed tovarand now contains aVariablerather than a plain string. - 
The
varsubnode ofClosureUsenow contains aVariablerather than a plain string. - 
The
varsubnode ofCatch_now contains aVariablerather than a plain string. - 
The
aliassubnode ofUseUseis nownullif no explicit alias is given. As such,use Foo\Baranduse Foo\Bar as Barare now represented differently. ThegetAlias()method can be used to get the effective alias, even if it is not explicitly given. 
Miscellaneous
- The indentation handling in the pretty printer has been changed (this is only relevant if you
extend the pretty printer). Previously indentation was automatic, and parts were excluded using
pNoindent(). Now no-indent is the default and newlines that require indentation should use$this->nl. 
Removed functionality
- Removed 
typesubnode onClass_,ClassMethodandPropertynodes. Useflagsinstead. - The 
ClassConst::isStatic()method has been removed. Constants cannot have a static modifier. - The 
NodeTraverserno longer acceptsfalseas a return value from aleaveNode()method.NodeTraverser::REMOVE_NODEshould be returned instead. - The 
Node::setLine()method has been removed. If you really need to, you can usesetAttribute()instead. - The misspelled 
Class_::VISIBILITY_MODIFER_MASKconstant has been dropped in favor ofClass_::VISIBILITY_MODIFIER_MASK. - The XML serializer has been removed. As such, the classes 
Serializer\XML, andUnserializer\XML, as well as the interfacesSerializerandUnserializerno longer exist. - The 
BuilderAbstractclass has been removed. It's functionality is moved intoBuilderHelpers. However, this is an internal class and should not be used directly. - The 
Autoloaderclass has been removed in favor of relying on the Composer autoloader.