PSR编码标准-PHP

时间:2018-08-31 23:52:23

标签: php

只是开发了一个简单的CLI php代码,用于计算您选择的大小的乘法表,但是当我检查文件以确保它们遵循PSR编码标准时,它给了我四个错误/违反。经过几次尝试和几天的工作之后,我不知道错误在文件中的什么位置。

有两个文件: cliVersion.php和generateCLITable.php

第一个文件给我1个PSR错误,第二个文件给我3个PSR错误。

这是我在命令行上生成大小为12的乘法表的方式:

  • php cliVersion.php 12

谁能帮助我找出文件中的PSR错误。

这是文件和错误报告:

cliVersion.php

<?php
declare(strict_types=1);

require_once 'generateCLITable.php';
require_once '../model/validateInput.php';
?>

<?php

// Assign the user's input argument value to $input variable
$inputString = $argv[1];

$errorMessage = "Please enter a valid argument (a whole number greater than 1)";


// Check if the user's input argument is not null or empty
if ($inputString == null || $inputString == "") {
    echo $errorMessage;
} else {

    // Create an object of ValidateInput Class
    $inputData = new ValidateInput();

    /*
     Validate the $input variable received from the user as an argument.
     The code will be safe to be processed after this line.
    */
    $validatedInput = $inputData->validateInputData($inputString);
    $validatedInputInt = (int)$validatedInput;

    /*
     Check if the validated input is an Integer and if it is,
     generates the table else returns the error message
    */
    $isInputValidInt = $inputData->isInputInt($validatedInputInt);

    if ($isInputValidInt && $validatedInputInt > 1) {
        $multTable = new MultTable();
        $multTable->generateTable($validatedInputInt);
    } else {
        echo $errorMessage;
    }
}

echo PHP_EOL;

GenerateCLITable.php

<?php
declare(strict_types=1);

class MultTable
{
    /**
     * The public generateTable function generates the multiplication table
     *
     * @param int $inputValue
     * 
     * @return void
     */
    public function generateTable(int $inputValue)
    {

        // Create first row of table headers - green colour
        for ($col=1; $col <= $inputValue; $col++) {
            echo "\033[35m \t$col \033[0m";
        }
        // Create remaining rows
        for ($row=1, $col=1; $row <= $inputValue; $row++) {
            echo "\n";
            // First cell is a table header - green colour
            if ($col == 1) {
                echo "\033[35m \n$row \033[0m";
            }
            while ($col <= $inputValue) {
                echo "\t" . $row * $col++ ;
            }
            // Reset $col at the end of the row
            $col = 1;
        }
    }
}

错误报告:

cliVersion.php
----------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE

generateCLITable.php
----------------------------------------------------------------------
FOUND 3 ERRORS AFFECTING 3 LINES

2 个答案:

答案 0 :(得分:0)

在这种情况下,我强烈建议使用https://github.com/FriendsOfPHP/PHP-CS-Fixer

答案 1 :(得分:0)

我猜您正在尝试对代码进行单元测试。我可能会专注于首先尝试对代码进行同样的考虑。以cliVersion为例,我认为您可以通过创建一个用于处理输入的方法来大大简化它。另外,我发现您的注释,变量和过度设计也引起了很多问题。

comments

修订版本:

<?php
//declare(strict_types=1); // I'm using php 5 so I don't have this (but ok for you)
require_once 'generateCLITable.php';
require_once '../model/validateInput.php';

$must_be_gtr_than = 1; // set floor val for validation
$inputData = new ValidateInput($must_be_gtr_than);
$multTable = new MultTable();

if ($inputData->isValidIntegerData($argv[1])) {
    $tableSize = (int) $argv[1];
    $multTable->generateTable($tableSize);
} else {
    echo "Error: Please enter a valid argument (a whole number greater than ".$must_be_gtr_than.")";
    die();
}

在此示例中,如果isValidIntegerData比proceed单独,则仅使用一种方法验证我的整数> 0。考虑一下易于使用的代码和有意义的名称,generateTable并不能告诉我太多,还有更好的名称吗?像这样的东西。以“ $ validatedInputInt”为例,它不代表您正在做的事情以及该int是什么,“ tableSize”对我来说更有意义。另外,我们也多次将骆驼保存为Class等。我会查找PSR2。

例如,我们使用

CONST_SOMETHING  = xx; //constants
var_x or varx // lowercase for vars
methodX  //camel back 
ClassName // ucwords for classes 
etc..

更新: 这可能就是我构建这样的东西的方式:

<?php
//declare(strict_types=1); // PHP5.x Example

class GenerateCLITable
{
    const DEFAULT_BOARD_SIZE = 12;
    public $game_board, $table_size;

    public function __construct($input = self::DEFAULT_BOARD_SIZE)
    {
        $this->game_board = $this->generateTable($input);
    }

    public function generateTable($inputValue = self::DEFAULT_BOARD_SIZE)
    {
        $table = "";
        // Create first row of table headers - green colour
        for ($col=1; $col <= $inputValue; $col++) {
            $table .= "\033[35m \t$col \033[0m";
        }
        // Create remaining rows
        for ($row=1, $col=1; $row <= $inputValue; $row++) {
            $table .= "\n";
            // First cell is a table header - green colour
            if ($col == 1) {
                $table .= "\033[35m \n$row \033[0m";
            }
            while ($col <= $inputValue) {
                $table .=  "\t" . $row * $col++ ;
            }
            // Reset $col at the end of the row
            $col = 1;
        }
        $this->game_board = $table;
        $this->table_size = $inputValue;
        return $table;
    }

    public function isValidInputValue($input = '', $size = 0)
    {
        return (!empty($input) && $input > $size) ? (is_int((int) $input)) : false;
    }

}

//require_once 'generateCLITable.php';
$multTable = new GenerateCLITable();
$must_be_gtr_than = 1;

if (!$multTable->isValidInputValue($argv[1], $must_be_gtr_than)) {
    echo "Error: Please enter a valid argument (a whole number greater than ".$must_be_gtr_than.")";
    die();
}
$table = $multTable->generateTable((int) $argv[1]);
echo $table . "\n";