PhpStorm:extract()标识变量

Seb*_*ski 7 php extract phpstorm

有谁知道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
    );
}
Run Code Online (Sandbox Code Playgroud)

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

Cod*_*man 10

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";
    };
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 嗯......使用PHP超过10年后,TIL:isset可能需要超过1个变量.+1 (7认同)