exakat.1.7.6 Review

exakat.1.7.6提供了一个新的报告,可配置PHP-CS-Fixer并在代码中自动修复。这意味着在良好的审计之后,可以系统地更新和清除下一个审计的所有问题的代码。我们还引入了一个探测器,用于PHP覆盖函数,array_merge()使用eylipsis和新的收藏夹:捕获的异常变量。代码只能向后理解;但exakat 1.7.6审查必须读取。 

使用PHP-CS-FIXER删除快速问题

这 PHP编码标准修订程序(PHP CS定影器) 工具修复您的代码以遵循标准。其主要目标是在PHP代码中进行自动化更新,以遵循编码标准。例如,确保汇位被声明 array or with [],但不是两者。 PHP-CS-FIXER附带定义的编码标准,如 PSR-1PSR-2

PHP-CS-FIXER还包括微验光:例如,更换 is_null($var) with $var === null 更快,因为运营商比函数调用更快。它也是一种微优化,因为性能增益是几微秒:除非这是循环,否则效果将很小。

exakat能够根据上次审计生成PHP-CS-Fixer配置文件,该文件将自动解决问题。由于许多PHP-CS-FIXER与exakat共享,因此exakat发现的问题可以通过PHP-CS定影器自动固定。 

以下是修复Code en Masse的操作: 

  • 运行exakat审计。确保规则集 Phpcsfixer 包含在配置中,in config / exakat.ini文件或命令行中 --format Phpcsfixer option with the project command. 
  • 获取配置文件: php exakat.phar report -p <project> -format Phpcsfixer。生成的文件是 projects/<project>/php_cs.php.
  • 生成的文件可能是这样的: 
<?php

$finder = PhpCsFixer\Finder::create()
    ->in('.')     // Change this to your code's path
    ->name('*.php');

return PhpCsFixer\Config::create()
    ->setRules(        
                array (
                  'no_short_bool_cast' => true,
                  'is_null' => true,
                  'function_to_constant' => true,
                  'elseif' => true,
                  'dir_constant' => true,
                  'combine_nested_dirname' => true,
                  'combine_consecutive_issets' => true,
                  'combine_consecutive_unsets' => true,
                  'logical_operators' => true,
                  'no_unset_on_property' => true,
                )
    )
    ->setFinder($finder);
  • 在代码中保存该文件,在名称下 .php_cs
  • 跑步 php vendor/bin/php-cs-fixer fix --dry-run 要检查将更新多少代码
  • 跑步 php vendor/bin/php-cs-fixer fix 实际修复代码
  • 承诺您的VCS
  • 运行一个新的exakat审计:这些问题已经消失了!

小心一词:与自动更新的任何工具一样,始终在提交之前查看PHP-CS-Fixer的修复程序。此外,运行您的测试,以确保代码仍在预期工作。

PHP覆盖函数

exakat报告了PHP覆盖函数。覆盖函数是本机PHP函数,具有自己的自定义定义。这发生在名称空间中。例如 : 

<?php

namespace {
    // displays a path
    echo dirname('/path/to/file');
}

namespace Mine {
    function dirname() {
        return __METHOD__;
    }

    // displays a method name
    echo dirname();
}

?>

第一个呼叫dirname是php本机舞蹈。对DirName的第二个调用嵌套在自定义命名空间中,并导致本地姓名函数,具有非常不同的行为。 

只要没有妄语的定义被添加到 Mine 命名空间,PHP回退到全局空间并使用本机版本。当函数的命名定义可用时,那么语法就不会’T更改,但本机函数已连接到另一个定义。这可能导致混淆。 

PHP覆盖函数在大使报告的AppInfo部分中报告,以便警告审核员这些功能正在代码中使用。它没有作为一个问题报告。 

array_merge.()和省略号

array_merge.()是一个强大的功能,将一个任意数组列表合并到一个。 

<?php
  $arrays = [[1,2], [3,4,5], [6]];
  $final = array_merge(...$arrays);
  // $final contains [1,2,3,4,5,6];
?>

$arrays 包含一个数组列表。由于省略省号运算符,它们被扩展为单独的参数时,请访问extripsis运算符: ...

使用 ... and array合并许多数组时,Merge()是一个重要的性能收益。每个调用数组merge()使其为新数组分配内存,包含所有参数。因此,只有一个呼叫,也很重要,也很重要。阅读更多 循环中没有array_merge() rule. 

其中一个局限性 ... is that it returns null 当数组为空时。 

<?php
  $arrays = [];
  $final = array_merge(...$arrays);
  //PHP Warning:  array_merge() expects at least 1 parameter, 0 given in Standard input code on line 3
?>

空()阵列导致警告会污染日志。另一方面,Array_Merge()能够处理唯一的空数组:它只是返回该空数组。 

解决方案是在使用之前检查阵列数组的内容。这可以用if /那条条件完成,或者通过使用空积分 ?? 操作员,结合 ...

<?php
  $arrays = [];
  $final = array_merge(...$arrays ?? [[]] ); // nested arrays
?>

新的最爱:抓住了异常

抓住了例外 catch 条款。从手册中取出,每个人都使用 $e 作为陷入困境的例外的名称。虽然没有命名该变量的公约,但可以清单使用的各种名称是有趣的。 

在名称中,捕获的变量可能是 $e$oExcept$oE$httpException$ae$error$a$exception$except$ex$e2$zhce$exc$nva$re$t, ….

每周审核:2019年,周#17

exakat包括A.‘weekly’报告:此报告采用五项分析为构建。这意味着短暂的审计报告,几乎没有问题审查。读取它们并不是很多,并在代码中查看它们。 PHP社区中的每个人都可以专注于一个经典的编码问题并解决它。谈谈周围的每周审计:你’LL找到面临同样挑战的程序员。

获得‘weekly’审核,运行审计,请求‘Weekly’ report.

# Init the project (skip when it is already done)    
php exakat.phar init -p <yourproject> -R //github.com/Seldaek/monolog.git -git 

# Run the project (skip when it is already done)    
php exakat.phar project -p <yourproject> 

# Export the weekly project (every monday)    
php exakat.phar report -p <yourproject> -format Weekly 

# Open projects/<yourproject>/weekly/index.html in your browser    

每周,您可以在此找到5个新分析,以便在您的代码中审查。事实上,当您的代码干净时,您也可以快速查看即将到来的  

每周 recommendations for PHP code review : 2019, week 2019-17

快乐的PHP代码评论 

所有352个分析仪都介绍在文档中,包括盛大: 如果有相同的条件 :具有相同条件的连续if /然后结构可以合并或者具有变化的条件之一。

它是一个常见的错误,发现了44%的源代码。

您可以查看图库中的所有exakat报告: exakat画廊.

下载exakat.io,安装它 Docker.,升级它‘exakat.phar升级-u’ and like us on GitHub..