はじめに
VSCodeを使ってPHPでプログラミングをしているとき、変数を宣言しているにもかかわらず赤い波線が出ることがありました。
この問題を対処したので残しておきます。2025-04-03
VSCodeを使ってPHPでプログラミングをしているとき、変数を宣言しているにもかかわらず赤い波線が出ることがありました。
この問題を対処したので残しておきます。バージョン
VSCode の拡張機能である、PHP Intelephense を使用している状況下でプログラミングを行なっていました。
以下のコードは該当部分を抜き出した物です。
関数updateArticlesで処理を書いている最中、
$existingImageCount
という変数を宣言し、foreach文の中で使用しました。
/**
* 編集した記事を更新する
*
* @return void
*/
private function updateArticle()
{
// ...
// 省略
// ...
// 既存画像の枚数を取得
// 更新前の枚数に続いて連番でリネームするため、最後に追加された画像の末尾番号を取得
$existingImageCount = $this->articleModel->getUploadedImageNextNumber($id);
if ($existingImageCount === -1) {
echo "画像の番号のリネームに失敗しました";
return;
}
// 記事画像のリネーム
foreach ($imageData as $index => $image) {
$imageNumber = $existingImageCount + $index;
}
// ...
// 省略
// ...
}
すると、foreach文の中の $existingImageCount
の方で、赤い波線が表示されました。
このエラーが出ましたが、問題なく動いています。
この $existingImageCount
には値が入っているにもかかわらず、赤い波線が表示されてしまうのは違和感です。
対処法は、変数の前に型を宣言するコメントをつけることです。
コードだと以下の通りに変更しました。
/**
* 編集した記事を更新する
*
* @return void
*/
private function updateArticle()
{
// ...
// 省略
// ...
// 既存画像の枚数を取得
// 更新前の枚数に続いて連番でリネームするため、最後に追加された画像の末尾番号を取得
/** @var int $existingImageCount */
$existingImageCount = $this->articleModel->getUploadedImageNextNumber($id);
if ($existingImageCount === -1) {
echo "画像の番号のリネームに失敗しました";
return;
}
// 記事画像のリネーム
foreach ($imageData as $index => $image) {
$imageNumber = $existingImageCount + $index;
}
// ...
// 省略
// ...
}
これで赤い波線が消えました。
拡張機能のPHP Intelephense がforeach文の中に入っている変数の型を検知できなかったのかな、というのが推論ですが、他の部分でも似たような処理をしているので謎が残ります。
とはいえ、解決はできました!変数を宣言しているのに赤い波線が出てしまう問題を解決しました。
他の方法で解決したよ、という方がいらしたら教えてください。