标签: phpmd

用于Eclipse的PHP Mess Detector

我安装了PTI Eclipse插件.

有可能改变PDepend,CodeSniffer并且UnitTest

当我尝试右键单击任何文件时,我也有一个Mess Detector选项,但单击它时没有任何反应.在搜索完所有配置选项后,我找不到任何设置PHPMD.

有谁知道如何解决它?

php eclipse unit-testing phpmd

68
推荐指数
1
解决办法
3031
查看次数

为什么switch(true)的NPath复杂度小于if()elseif()?

我有这个函数负责将文件名和mime-type转换成更"人性化"的东西(例如file.png,image/png到[Image,PNG]).我发现有趣的是,if() elseif()语句组的复杂度高于switch(true)语句.

使用以下代码,PHP Mess Detector输出一个4410的NPath:

public function humanKind()
{
    $typeRA = explode("/", strtolower($this->type));
    $fileRA = explode(".", $this->name);
    $fileType = strtoupper($fileRA[count($fileRA) - 1]);

    switch($typeRA[0]) {
        case "image":
            $humanType = "Image";
            break;
        case "video":
            $humanType = "Video";
            break;
        case "audio":
            $humanType = "Sound";
            break;
        case "font":
            $humanType = "Font";
            break;
        default:
            $humanType = "File";
    }

    switch ($this->type) {
        case "application/msword":
        case "application/pdf":
        case "applicaiton/wordperfect":
        case "text/plain":
        case "text/rtf":
        case "image/vnd.photoshop":
        case "image/psd":
        case "image/vnd.adobe.photoshop":
        case "image/x-photoshop":
        case "application/xml": …
Run Code Online (Sandbox Code Playgroud)

php time-complexity phpmd

16
推荐指数
1
解决办法
997
查看次数

为什么干净的代码禁止其他表达

我在函数中有这个代码:

if ($route !== null) { // a route was found
    $route->dispatch();
} else {
    // show 404 page
    $this->showErrorPage(404);
}
Run Code Online (Sandbox Code Playgroud)

现在PHPmd给出了一个错误:

run方法使用else表达式.否则永远不需要,您可以简化代码,而无需其他工作.

现在我想知道是否真的会更好的代码来避免else而只是在if部分添加一个return语句?

php phpmd

16
推荐指数
3
解决办法
4292
查看次数

什么是phpmd以及如何使用它?

我有Ubuntu 14.04 + Sublime text 3并安装了phpcs软件包

我安装了附加件phpcsphp-cs-fixer 在我的系统上

来自这个博客

我发现phpmd(PHP Mess Detector)也是一个必需的库,因此根据官方php md 页面上的给定指令使用替代方法安装phpmd 从github存储库 一切都已完成.

:~/phpmd$ curl -s http://getcomposer.org/installer | php
#!/usr/bin/env php
All settings correct for using Composer
Downloading...

Composer successfully installed to: /home/keshav/phpmd/composer.phar
Use it: php composer.phar
Run Code Online (Sandbox Code Playgroud)

但现在我在终端上写字

  phpmd /opt/lampp/htdocs/myproject, myfile.php 
Run Code Online (Sandbox Code Playgroud)

phpmd:找不到命令

主目录上有phpmd文件夹,没有任何错误.

composer.json根据github上的建议,我在项目文件夹中创建了核心PHP创建的本地项目.

请告诉我是什么意思

然后在项目中安装Composer (或直接下载composer.phar):

phpmd composer-php sublimetext3 ubuntu-14.04

11
推荐指数
1
解决办法
1万
查看次数

避免使用对Exception的静态访问

我刚刚第一次启动了PHPMD,可以预见的是,我有一个我无法弄清楚的错误.错误是

避免在方法'setLang'中使用对'InvalidArgumentException'类的静态访问.

而代码是

public function setLang($val0) {
    switch ($val0) {
    case ENG:
    case FRE:
    case SPA;
        $this->lang = $val0;
        break;
    default:
        throw new InvalidArgumentException("Invalid language choice.");
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试了各种不同的东西,但我认为在一天结束时Exception是静态工厂(???)所以它必须具有静态访问权限.但是,PHPMD的人肯定比我聪明,所以不会让他们感到害怕.

为什么会出现此警告,以及如何解决?

php testing exception code-cleanup phpmd

9
推荐指数
1
解决办法
6795
查看次数

PHPMD 不能带参数运行

我一直在尝试将 phpmd 配置为与 PhpStorm 一起使用,但我被困在这里。这是我的错误:

PHP Mess Detector
phpmd:无法正确运行带有参数的工具:
C:/Users/me/AppData/Local/Temp/___18.tmp/folder/myclass.php
xml codesize,controversial,design,naming,unusedcode
可能的工具进程挂起5秒后。

我在 Windows 上使用 PhpStorm。奇怪的是,它似乎在我运行时运行Code > Inspect Code,只是没有进行实时检查。事情是我的路径不是这个,我的文件位于C:/Users/Code/myapp.

谁能帮我解决这个错误?

php phpstorm phpmd

8
推荐指数
1
解决办法
2019
查看次数

如何在本地关闭评论中的 phpmd 规则?

如何在本地禁用几行的单个 phpmd 规则,然后重新启用规则,例如unusedcode

php phpmd

6
推荐指数
1
解决办法
2706
查看次数

如何忽略 PHPMD 中特定目录的特定规则

命令

phpmd app,config,routes text phpmd.xml
Run Code Online (Sandbox Code Playgroud)

我在 Laravel 项目上使用 phpmd,在 design.xml 下有一个名为的规则CouplingBetweenObjects,我想忽略 app/Http/Controllers 目录中的所有文件到此规则,phpmd 只提供--exclude使该目录通过所有规则的选项,是否可能通过 XML 文件或命令行忽略特定目录的规则

phpmd.xml

<?xml version="1.0" encoding="UTF-8"?>
<ruleset name="Netask rule set"
    xmlns="http://pmd.sf.net/ruleset/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
    xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
<description>Netask code style rule set
</description>
<rule ref="rulesets/codesize.xml/CyclomaticComplexity"/>
<rule ref="rulesets/codesize.xml/NPathComplexity"/>
<rule ref="rulesets/codesize.xml/ExcessiveMethodLength"/>
<rule ref="rulesets/codesize.xml/ExcessiveClassLength"/>
<rule ref="rulesets/codesize.xml/ExcessiveParameterList"/>
<rule ref="rulesets/codesize.xml/ExcessivePublicCount">
    <properties>
        <property name="minimum" value="30"/>
    </properties>
</rule>
<rule ref="rulesets/codesize.xml/TooManyFields">
    <properties>
        <property name="maxfields" value="20"/>
    </properties>
</rule>
<rule ref="rulesets/codesize.xml/TooManyMethods"/>
<rule ref="rulesets/codesize.xml/ExcessiveClassComplexity">
    <properties>
        <property name="maximum" value="30"/>
    </properties>
</rule>
<rule ref="rulesets/controversial.xml"/>
<rule …
Run Code Online (Sandbox Code Playgroud)

php phpmd

6
推荐指数
1
解决办法
5515
查看次数

为什么这段代码具有很高的圈复杂度 - 或者它是 Jenkins 中 PHPMD 中的一个错误?

我试图了解圈复杂度的工作原理以及如何避免警告。是的,我明白编写代码的目的不是避免任意警告,但我至少想知道发生了什么,以便我可以决定我看到的代码是好还是坏。

我有一个看起来像的函数:

protected function update($uuid, $data, $householdUuid, $androidId) {
    $household = $this->householdService->getHouseholdByUuid($householdUuid);

    $this->updatePeriod($household, $data);
    $this->updateNickname($household, $data, $androidId);
    $this->updateDateOrder($household, $data);
    $this->updateCurrency($household, $data);
    $this->updateAccounts($household, $data);

    $household->save();
    return $this->respondUpdated();
}
Run Code Online (Sandbox Code Playgroud)

这被标记为具有 10 的圈复杂度。这怎么可能?从文档中,我将其视为 1。唯一的可能性是 PHPMD 正在下降到各种方法调用中。

但如果是这样,那么我就没有办法“修复”这个方法了。通常,我会通过提取较小的辅助方法来降低方法的复杂性。该方法已经被重构为各种 update() 方法,以消除发生的一堆条件更新。原始方法的圈复杂度也为 10,并且重构没有做任何事情。

或者问题可能更简单——我通过与 Jenkins 设置的持续集成来运行 PHPMD。PHPMD 没有使用最新的代码会不会有问题?在我已经将类重构到行数限制以下之后,我遇到了一些类似的问题,它会将类标记为行数过多。

php cyclomatic-complexity jenkins phpmd

5
推荐指数
1
解决办法
5572
查看次数

PHP Mess Detector 避免使用静态访问

我在 Laravel 控制器可调用类上使用 PHP Mess Detector,我收到这样的消息

Avoid using static access to class 'Illuminate\Support\Facades\Cache' in method '__invoke'
Run Code Online (Sandbox Code Playgroud)

谁能解释为什么我必须避免在调用方法上使用静态访问?

controller laravel phpmd illuminate

5
推荐指数
1
解决办法
1720
查看次数