前提・実現したいこと
引数を展開する際に、その値は必ずしもある、というわけではないですよね。
そういったときに三項演算子が便利と知り取り入れたのですが、値がないときはどうするのがいいか知りたいです。
コード規約があれば従うべきですが、個人開発の初心者につきそういったものはございませんので、皆様の方法を教えて頂きたく存じます。
初心者につき至らない点多々あるかと思いますが、どうぞよろしくお願い申し上げます。
発生している問題・エラーメッセージ
以下hogeという関数でargsを受け取っています。
未定義や空文字に備え、これらの値の展開にあたって下記で三項演算子を使っていて、値がないときは``をセットするようにしました。
しかしoffsetは0がありえますので、nameやorder_byと同様にemptyで判定することができず、offsetだけ次のように複雑な書き方になってしまいました。
このような書き方はおかしいでしょうか。どうするのがいいか、アドバイス頂けましたら幸いです。
該当のソースコード
php
1<?php 2$args = [ 3 'name' => 'smith', 4 'order_by'=> 'created_at', 5 'offset' => 1, 6]; 7 8function hoges( $args ) { 9 // 展開 10 $name = !empty($args['name']) ? $args['name'] : ''; 11 $order_by = !empty($args['order_by']) ? $args['order_by'] : ''; 12 $offset = ( !empty($args['offset']) || ( isset($args['offset']) && $args['offset'] == 0 ) ) ? (int)$args['offset'] : ''; 13 14 // 展開した値を使い以下から色々な処理をやっていく 15}
試したこと
上記三つどれでも使える判定専用の関数を作ったらサッパリできると思ったのですが、未定義のときに「Undefined variable: v」のエラーとなってしまうために採用できませんでした。
php
1// 未定義、null、空文字のときにtrueを返す 2function my_is_empty( $v ) { 3 $is = false; 4 if ( !isset( $v ) ) { 5 $is = true; 6 } 7 if ( is_null( $v ) ) { 8 $is = true; 9 } 10 if ( $v === '' ) { 11 $is = true; 12 } 13 return $is; 14} 15 16// 実行すると未定義のときに「Undefined variable: v」のエラーとなってしまう 17$v = ''; // ok 18$v = null; // ok 19$v; // 機能しない 20var_dump( my_is_empty( $v ) );
補足情報(FW/ツールのバージョンなど)
レンタルサーバーの事情によりPHP var7.3.1 使用ですが、アップデートで楽になるならサーバーを変更しようと思っています。
回答6件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/17 12:04