Неопределенная переменная в PHPStan, но она объявлена ​​в другом месте

Как вы справляетесь с этими сценариями в PHPStan:

  1. Допустим, вы используете простой PHP в качестве движка шаблонов. Например,
// view.php

<b><?=$foo?></b>

  1. Скажем, у вас есть 2 файла a.php а также b.php
// a.php     
$foo = 'bar';

// b.php     
require 'a.php';     
echo $foo;

PHPStan сообщит об этом как Undefined variable: $foo

Как вы справляетесь с этим? Можно ли сконфигурировать PHPStan для выполнения вашего приложения, чтобы он знал, что эти переменные фактически определены во время выполнения?

1 ответ

Вы можете попробовать использовать phpstan.neonрешение, представленное в phpstan#104 (комментарий):

Вы можете игнорировать ошибку для определенных переменных, используя регулярные выражения, даже в определенных каталогах. В вашем случае вы можете использовать:

parameters:
    ignoreErrors:
        -
            message: '#Undefined variable: \$foo.*#'
            path: my/directory/*
/** @var string $foo */

echo $foo; // No error

echo $unintededUndeclaredVariable; // Error

Все, что вам нужно сделать, это выполнить проверку, чтобы убедиться, что переменная установлена.

например

if (isset($foo)) {
    echo $foo;
}

или что-то вроде следующего, если вы не хотите обернуть весь свой код в if,

if (! isset($foo)) {
    throw new Exception('$foo not set');
}
Другие вопросы по тегам