【问题标题】:PhpStorm: extract() identifying variablesPhpStorm:extract() 识别变量
【发布时间】:2017-04-18 20:31:04
【问题描述】:

有谁知道 PhpStorm 中是否有一个设置可以触发使用extract() 函数生成的识别变量?

示例如下:

/**
 * @return array
 */
protected function orderSet() : array
{
    //...

    return [
        'colour' => $colour,
        'green' => $green,
        'orange' => $orange
    ];
}


/**
 * @test
 */
public function returns_correct_attribute_names()
{
    $params = $this->orderSet();
    extract($params);

    $this->assertEquals(
        'Colour',
        $colour->name
    );
}

目前在测试中提取的任何变量都被突出显示(无法识别),但也许有一个设置可以改变这种行为?

【问题讨论】:

  • 您可以使用带有@var 的内联PHPDoc 注释来告诉IDE 这个变量是已知的以及它是什么类型:/** @var MyClass $color */
  • 感谢@LazyOne - 所以除了使用注释之外,PhpStorm 中没有别的东西了吗?
  • 其实,刚刚试了一下,好像也不管用。
  • @LazyOne 但是其余变量呢:$green,$orange? PhpDockBlock 可以帮助理解它是什么变量,但它不能帮助理解这个变量在哪里定义或我们如何获得它。
  • @seb 短代码可能非常复杂,“extract()”对您的服务器来说可能比 VO 花费更多。有时最好浪费一些代码行来获得更轻量的应用程序。

标签: php phpstorm extract


【解决方案1】:

LazyOne 提供的解决方案确实有效。但是,您需要更多的上下文来实现它。

要准确通知 PHPSTORM 您要声明的变量,注释必须直接放在 extract()而不是父函数.

   public function db(){
    $db = new SQLite3('db/mysqlitedb.db');

    $payments = $db->query('SELECT * FROM payments');

    while ($pay = $payments->fetchArray()){
        /**
         * @var string $to_user
         * @var string $from_user
         * @var number $amount
         */
        extract($pay);
        if (isset($to_user, $from_user, $amount))
            echo "TO: {$to_user}| FROM: {$from_user}| $ {$amount} \n";
    };
}

这是我的代码中的一个工作示例(由于某种原因无法复制您的)。

你可以看到在我使用 extract() 函数之前,我在上面的注释块中声明了隐藏变量和数据类型。

奖励:如果您打算使用提取,我强烈建议您使用 isset 来确保您正在解析的数组包含您期望的字段。 上面代码中的示例

【讨论】:

  • 呵呵...在使用 PHP 10 多年后,TIL: isset 可以接受超过 1 个变量。 +1
猜你喜欢
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 2021-02-27
  • 2017-06-11
  • 2013-05-15
  • 2015-03-03
  • 2020-02-01
  • 2021-11-01
相关资源
最近更新 更多