ことれいのもり

PHP 引数の初期値に変数を使いたい!よくある間違いと正しい書き方

はじめに

PHPで関数やメソッドを定義するとき、引数の初期値に変数を設定したくなることはよくあります。

特に「ある変数の値をそのまま使いたい」というケースはよくありませんか?

この記事ではPHPでの正しい初期値の書き方を紹介しつつ、私がやってしまった間違いとその理由についても解説します。

「正しい使い方が知りたい」「上手く動かない原因が知りたい」というどちらの方にも役立つ内容を目指しました。

正しい使い方

まずは、正しい使い方から紹介します。

例えばユーザーに挨拶をする、「greet()」関数を考えてみましょう。

「名前が指定されているならそれを使い、指定されていなければデフォルトの名前を使う」という関数です。

public function greet($name = null)
{
    if ($name === null) {
        $name = $this->defaultName;
    }

    echo "Hello, {$name}!";
}

ここでのポイントは引数に直接$this->defaultNameを書かず、いったんnullを受け取ってから関数に代入しているところです。

というのもPHPでは引数のデフォルト値に変数を直接指定できません。(例えば$this->defaultName

そのため、「変数をデフォルトとして使いたいとき」は、まずnullで受け取っておいて、関数の中で条件分岐して代入する方法が王道です。

よくある間違い

よくある間違いは、引数のデフォルト値にそのままクラスのプロパティを指定しようとするものです。

public function greet($name = $this->defaultName)  // エラー
{
    echo "Hello, {$name}!";
}

このように書くとエラーが出ます!

気持ちはすごく分かりますが、「正しい使い方」のように、nullを渡して条件分岐しましょう。

おわりに

関数やメソッドの引数の初期値に変数を設定する方法を紹介しました。

「nullを渡して条件分岐で指定する」というのをぜひ覚えて使ってみてください。