bhittani / php-parser
支持向下兼容旧版本的语法解析器。
0.1.9
2017-02-16 16:37 UTC
Requires
- php: >=5.4,<8.0-DEV
- nikic/php-parser: ^2.1
Requires (Dev)
- phpunit/phpunit: ^4.8
- squizlabs/php_codesniffer: ^2.7
README
支持向下兼容旧版本的语法解析器。
此库包含用于与 nikic/PHP-Parser 一起使用的自定义遍历访问者。
目录
安装
可以使用 composer 消费此库。
在您的终端中运行
$ composer require bhittani/php-parser
使用方法
要利用此库,请确保您了解 nikic/PHP-Parser 如何解析代码。
此库包含一组用于操作 PHP 代码的节点访问者。
将组导入转换为单个导入
向下兼容 php 7+ 的语法代码。
use Bhittani\PhpParser\GroupToSingleImportsVisitor; $traverser->addVisitor(new GroupToSingleImportsVisitor);
将
use Grouped\Imports\{Acme, Foo\Bar}
转换为
use Grouped\Imports\Acme; use Grouped\Imports\Foo\Bar;
将拆分调用转换为 call_user_func_array
向下兼容 php 5.6+ 的语法代码。
use Bhittani\PhpParser\SplatToCallUserFuncArrayVisitor; $traverser->addVisitor(new SplatToCallUserFuncArrayVisitor);
将
$val = my_func($a, 'b', ...$params);
转换为
$val = call_user_func_array('my_func', array_merge(array( $a, 'b' ), $params));
将类常量转换为字符串
向下兼容 php 5.5+ 的语法代码。
use Bhittani\PhpParser\ClassConstToStrVisitor; $traverser->addVisitor(new ClassConstToStrVisitor);
将
use Acme\Foo\Bar; $barClass = Bar::class;
转换为
use Acme\Foo\Bar; $barClass = 'Acme\Foo\Bar';
将可变参数转换为 func_get_args
向下兼容 php 5.6+ 的语法代码。
use Bhittani\PhpParser\VariadicToFuncGetArgsVisitor; $traverser->addVisitor(new VariadicToFuncGetArgsVisitor);
将
function my_func($a, $b, ...$params) { // my_func code }
转换为
function my_func() { $params = func_get_args(); $a = array_shift($params); $b = array_shift($params); // my_func code }
移除导入
移除所有导入语句。
use Bhittani\PhpParser\RemoveImportsVisitor; $traverser->addVisitor(new RemoveImportsVisitor);
将移除所有
use
语句。
追加后缀
为所有导入、类、特性接口追加后缀。
use Bhittani\PhpParser\AppendSuffixVisitor; $traverser->addVisitor(new AppendSuffixVisitor('_1'));
将
<?php namespace Company\Package; use Acme\Foo; use Acme\Bar\{Beep, Boop}; interface Contract {} abstract class AnAbstract {} trait OurTrait {} class Person extends AnAbstract implements Contract, AnotherContract { use OurTrait; use Their\Trait; public function handle(Beep $beep, Model\User $age) { $foo = new Foo(); $bar = new Bar(); if ($beep->boop()) { throw new Exception('Error thrown.'); } } }
转换为
<?php namespace Company\Package; use Acme\Foo_1 as Foo; use Acme\Bar\{Beep_1 as Beep, Boop_1 as Boop}; interface Contract_1 {} abstract class AnAbstract_1 {} trait OurTrait_1 {} class Person_1 extends AnAbstract_1 implements Contract_1, AnotherContract_1 { use OurTrait_1; use Their\Trait_1; public function handle(Beep $beep, Model\User_1 $age) { $foo = new Foo(); $bar = new Bar_1(); if ($beep->boop()) { throw new Exception('Error thrown.'); } } }
注意,PHP 的内置实体不会追加后缀。
测试
请确保您首先切换到库的根目录。
运行 composer install。
$ composer install
运行测试。
$ vendor/bin/phpunit tests
或者
$ composer test
致谢
没有使用 nikic/PHP-Parser,此库将无法实现。
许可
此库根据 MIT 许可证 发布。