121 lines
4.6 KiB
Markdown
121 lines
4.6 KiB
Markdown
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 |