Upgrading from PHP-Parser 0.9 to 1.0 ==================================== ### PHP version requirements PHP-Parser now requires PHP 5.3 or newer to run. It is however still possible to *parse* PHP 5.2 source code, while running on a newer version. ### Move to namespaced names The library has been moved to use namespaces with the `PhpParser` vendor prefix. However, the old names using underscores are still available as aliases, as such most code should continue running on the new version without further changes. Old (still works, but discouraged): ```php $parser = new \PHPParser_Parser(new \PHPParser_Lexer_Emulative); $prettyPrinter = new \PHPParser_PrettyPrinter_Default; ``` New: ```php $parser = new \PhpParser\Parser(new PhpParser\Lexer\Emulative); $prettyPrinter = new \PhpParser\PrettyPrinter\Standard; ``` Note that the `PHPParser` prefix was changed to `PhpParser`. While PHP class names are technically case-insensitive, the autoloader will not be able to load `PHPParser\Parser` or other case variants. Due to conflicts with reserved keywords, some class names now end with an underscore, e.g. `PHPParser_Node_Stmt_Class` is now `PhpParser\Node\Stmt\Class_`. (But as usual, the old name is still available.) ### Changes to `Node::getType()` The `Node::getType()` method continues to return names using underscores instead of namespace separators and also does not contain the trailing underscore that may be present in the class name. As such its output will not change in many cases. However, some node classes have been moved to a different namespace or renamed, which will result in a different `Node::getType()` output: ``` Expr_AssignBitwiseAnd => Expr_AssignOp_BitwiseAnd Expr_AssignBitwiseOr => Expr_AssignOp_BitwiseOr Expr_AssignBitwiseXor => Expr_AssignOp_BitwiseXor Expr_AssignConcat => Expr_AssignOp_Concat Expr_AssignDiv => Expr_AssignOp_Div Expr_AssignMinus => Expr_AssignOp_Minus Expr_AssignMod => Expr_AssignOp_Mod Expr_AssignMul => Expr_AssignOp_Mul Expr_AssignPlus => Expr_AssignOp_Plus Expr_AssignShiftLeft => Expr_AssignOp_ShiftLeft Expr_AssignShiftRight => Expr_AssignOp_ShiftRight Expr_BitwiseAnd => Expr_BinaryOp_BitwiseAnd Expr_BitwiseOr => Expr_BinaryOp_BitwiseOr Expr_BitwiseXor => Expr_BinaryOp_BitwiseXor Expr_BooleanAnd => Expr_BinaryOp_BooleanAnd Expr_BooleanOr => Expr_BinaryOp_BooleanOr Expr_Concat => Expr_BinaryOp_Concat Expr_Div => Expr_BinaryOp_Div Expr_Equal => Expr_BinaryOp_Equal Expr_Greater => Expr_BinaryOp_Greater Expr_GreaterOrEqual => Expr_BinaryOp_GreaterOrEqual Expr_Identical => Expr_BinaryOp_Identical Expr_LogicalAnd => Expr_BinaryOp_LogicalAnd Expr_LogicalOr => Expr_BinaryOp_LogicalOr Expr_LogicalXor => Expr_BinaryOp_LogicalXor Expr_Minus => Expr_BinaryOp_Minus Expr_Mod => Expr_BinaryOp_Mod Expr_Mul => Expr_BinaryOp_Mul Expr_NotEqual => Expr_BinaryOp_NotEqual Expr_NotIdentical => Expr_BinaryOp_NotIdentical Expr_Plus => Expr_BinaryOp_Plus Expr_ShiftLeft => Expr_BinaryOp_ShiftLeft Expr_ShiftRight => Expr_BinaryOp_ShiftRight Expr_Smaller => Expr_BinaryOp_Smaller Expr_SmallerOrEqual => Expr_BinaryOp_SmallerOrEqual Scalar_ClassConst => Scalar_MagicConst_Class Scalar_DirConst => Scalar_MagicConst_Dir Scalar_FileConst => Scalar_MagicConst_File Scalar_FuncConst => Scalar_MagicConst_Function Scalar_LineConst => Scalar_MagicConst_Line Scalar_MethodConst => Scalar_MagicConst_Method Scalar_NSConst => Scalar_MagicConst_Namespace Scalar_TraitConst => Scalar_MagicConst_Trait ``` These changes may affect custom pretty printers and code comparing the return value of `Node::getType()` to specific strings. ### Miscellaneous * The classes `Template` and `TemplateLoader` have been removed. You should use some other [code generation][code_gen] project built on top of PHP-Parser instead. * The `PrettyPrinterAbstract::pStmts()` method now emits a leading newline if the statement list is not empty. Custom pretty printers should remove the explicit newline before `pStmts()` calls. Old: ```php public function pStmt_Trait(PHPParser_Node_Stmt_Trait $node) { return 'trait ' . $node->name . "\n" . '{' . "\n" . $this->pStmts($node->stmts) . "\n" . '}'; } ``` New: ```php public function pStmt_Trait(Stmt\Trait_ $node) { return 'trait ' . $node->name . "\n" . '{' . $this->pStmts($node->stmts) . "\n" . '}'; } ``` [code_gen]: https://github.com/nikic/PHP-Parser/wiki/Projects-using-the-PHP-Parser#code-generation