エンジニ屋.com(エンジニヤドットコム)

分かりやすくを意識して情報発信!

【PHP】Error:Call to a membe function .....() on null if文の条件で起きた時のエラー対処法

Call to a member function has() on null の対処

エラーの理由

関数の呼び出し元がnullだから関数を呼び出せないから

実際のエラー時のコード

$session = $request->getSession();

if ( !$session->has('_security_admin') && file_exists($maintenanceFile) ) {
    $pathInfo = \rawurldecode($request->getPathInfo());
}

リクエストからセッションを取得して、変数sessionに格納してます。 if文で$sessionにsecurity_adminが入っていなかったら(!で否定にしているので)通過するように設定しています。 security_adminの値が入っているか入っていないかのhas()関数は、その手前でリクエストからsessionで取得していた場合に利用出来ます。 なのでそもそもリクエストがない場合に、今回のようにエラーが返ってきます。

対処法

少し追記するだけで回避できます。 下記のようにif文の条件に$session !== nullを追加するだけです。 こうすることで、もしnullの場合はこの時点で弾かれるので、sessionからhas()があるのかないのか読まれないのでエラーになりません。

if ( $session !== null && !$session->has('_security_admin') && file_exists($maintenanceFile) ) {
    $pathInfo = \rawurldecode($request->getPathInfo());
}

他にもif文の前にif(!is_null($session))で回避する方法もありますが、構文的に上記の方がスッキリして良いかと思います。
以上です。
Have a nice development day!!