開発をしていて、未定義のキーや属性でのアクセスエラーは誰しも経験します。
配列のキー(price)が未定義なら、
>>> $p1 = ['name' => 'apple']; => [ "name" => "apple", ] >>> $p1['name']; => "apple" >>> $p1['price']; PHP Notice: Undefined index: price in Psy Shell code on line 1
オブジェクトの属性(price)が未定義なら、
>>> $p2 = (object)['name' => 'apple']; => {#2318 +"name": "apple", } >>> $p2->name; => "apple" >>> $p2->price; PHP Notice: Undefined property: stdClass::$price in Psy Shell code on line 1
なんのことはない、このような場合は、未定義のpriceを初期化してあげればよいですね。
しかし、この初期化、都合によってはできないときあります。画面のフォームにおいて条件によりpriceの入力をするときと、しないときがあるとか。
そのときには、isset()の関数を使用して、キーや属性が定義されているかどうかをチェックします。
>>> isset($p1['name']); => true >>> isset($p1['price']); => false >>> isset($p2['name']); => true >>> isset($p2->price); => false
そして、未定義のエラーを出さずにデフォルトの値を割り当てたいなら、三項演算子を利用します。
>>> $name = isset($p1['name']) ? $p1['name'] : ''; => "apple" >>> $price = isset($p1['price']) ? $p1['price'] : 0; => 0 >>> $name = isset($p2->name) ? $p2->name : ''; => "apple" >>> $price = isset($p2->price) ? $p2->price : 0; => ""
繰り返しの記述が面倒なら、Laravelでは便利なヘルパーあります:array_get(), data_get()
>>> $name = array_get($p1, 'name', ''); => "apple" >>> $price = array_get($p1, 'price', 0); => 0 >>> $name = data_get($p2, 'name', ''); => "apple" >>> $price = data_get($p2, 'price', 0); => 0
そして、php7なら、Null合体演算子を利用しても同様なことができます。
>>> $name = $p1['name'] ?? ''; => "apple" >>> $price = $p1['price'] ?? 0; => 0 >>> $name = $p2->name ?? ''; => "apple" >>> $price = $p2->price ?? 0; => 0メルマガ購読の申し込みはこちらから。