Skip to content

PossiblyNullArgument

関数が期待していないにもかかわらず、nullの可能性のある値で関数を呼び出そうとした場合に発生します。

<?php
function foo(string $s): void {}
foo(rand(0, 1) ? "hello" : null);

よくある問題のケース

if内での関数呼び出しの使用

<?php
if (is_string($cat->getName()) {
    foo($cat->getName());
}
これは失敗します。なぜなら、$cat->getName()の後続の呼び出しが常に同じ結果を返すという保証がないからです。

可能な解決策

変数を使用する:

<?php
$catName = $cat->getName();
if (is_string($catName) {
    foo($catName);
}
unset($catName);
または、関数の宣言に@psalm-mutation-freeを追加する。

ifの後に別の関数を呼び出す

<?php
if (is_string($cat->getName()) {
    changeCat();
    foo($cat->getName());
}
これは失敗します。なぜなら、psalmはchangeCat()が実際に$catを変更するかどうかを知ることができないからです。

可能な解決策

  • 他の関数(ここではchangeCat())の宣言にも@psalm-mutation-freeを追加する
  • 変数を使用する:上記を参照

ユーザーノート