bhittani/php-parser

支持向下兼容旧版本的语法解析器。

0.1.9 2017-02-16 16:37 UTC

This package is auto-updated.

Last update: 2024-09-04 20:09:07 UTC


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 许可证 发布。