• ベストアンサー

関数の引数のデフォルト値について

PHP5.2.4を使用しています。 自作関数で、例えば数値や文字列を受け取る引数のデフォルト値を 「''」で入力されてないかをチェックする場合と、 「NULL」で入力されてないかをチェックする場合とでは、 どちらが良いというのはあるのでしょうか? function a($arg = '') {  if($arg == '')  {  } } //または function a($arg = NULL) {  if(is_null($arg))  {  } }

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • mpx
  • ベストアンサー率71% (149/209)
回答No.1

>> 「''」で入力されてないかをチェックする場合と、 >> 「NULL」で入力されてないかをチェックする場合とでは、 >> どちらが良いというのはあるのでしょうか? 自作プログラムで一品料理なら、どちらでも動作上の差異はないでしょうが、 一般に再利用する関数などは、「プログラムの可読性」が重要です。 $arg = '' の場合は、$argを文字型であることを宣言しています。 $arg = NULL の場合は、$argの型が不明です。 その変数の使い方を分かりやすくするために、型に応じたデフォルト値使い分けをしておくと、のちのち見やすくなります。

takagoo100
質問者

お礼

ご返答ありがとうございます。 なるほど、型を明確にするために使いわけをするということですね。

関連するQ&A

  • 引数付自作関数において、引数を送らない場合について

    こんにちは。 makecolumn(a,b,c)という 自作関数があったとします。 ここで、 aとcにのみ、引数をおくり、 bは、デフォルト値を使いたいと 思います。 この場合、 makecolumn(30,,40) のようにすると、 どうも、エラーになってしまいます。 プログラム側では、 bの値について、 makecolumn=function(a,b,c){ if(b==null || b==''){ b=デフォルト値; } } としていますが、うまくいきません。 引数があるのに、空白で送ってきた場合に、 その状態を取得するには、 どうしたらいいのでしょうか。 よろしくお願いします。

  • 引数のある関数と引数のない関数の設定

     お世話になっております。 PHPのプログラミングで関数をつくる際に、引数を渡す関数と引数がない関数がありますが、すでに定義済みの関数のように、引数がある場合と引数がない場合の両方を取り扱うにはどうしたらよいでしょうか? function example ($a) { if ($a == 0 || $a == '') { print '引数なし'; } else { print $a; } } のような関数で、 example(); という感じで引数を入れないと、 Warning: Missing argument … というエラーがでてしまいます。関数を example(''); と呼び出すと大丈夫なのですが。。。 プログラマーにとって基本的なことだと思うのですが、調べてもなかなか出てこないので質問させて頂きました。どなたかわかる方がいたらしたらおしえてください。 よろしくお願いします! }

    • ベストアンサー
    • PHP
  • 関数の引数に未定義の変数を渡すとエラーが出る

    自作の関数で、issetとemptyを一緒に判定する関数を作っているのですがエラーが出ます。 ある変数が「未定義」または「null」または「""(空白)」の場合はnullである、という関数を作りたいです。 ------------------------------------------ function is_null_ex($value){  if (!isset($value)) {return true;}               // 未定義かnullの場合、trueを返す  else if (strlen(strval($value)) === 0) {return true;}   // 空白の場合はtrueを返す  else {return false;}                      // $valueに値が入っている場合はfalseを返す } is_null_ex($val); ------------------------------------------ 上記の関数で$valueが未定義の場合にfuncを使うと、次のようなエラーが出ます。 Notice: Undefined variable: val つまり、未定義の変数を引数に渡すとエラーが出ます。 「未定義なら関数に渡さなければ?」と思うかもしれませんが、そもそもこの関数は「未定義」または「null」または「""(空白)」を判定したい関数なのです。 この場合、どうすれば良いのでしょうか? エラーは出ますが上記の関数で「if (!isset($value)) {return true;}」の部分できちんと判定はされています。 PHP5.3系で運用しています。 ぞうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • OpenOffice Basicで引数を2つ利用する関数が作れません

    OpenOffice Basicで引数を2つ利用する関数が作れません Open Office Calc 3.1.1を使っています。 できれば複数(3つ以上)引数を取る関数を作りたいのですが、 2つ引数を取ろうとすると演算結果が#NAME?になってしまいます。 切り分けにシンプルな関数を作ってみました。 以下で=test2(3,5)とすると結果が#NAME?になります。 Function test2(arg1 As Integer, arg2 As Integer) as Integer test2 = 3 + arg2 End Function #なお、関数内の演算内容はtest2 = arg1 + arg2でも変わらず#NAME?です 切り分けで以下を作ると=test3(3)で6が返されます Function test3(arg1 As Integer) as Integer test3 = 3 + arg1 End Function 関数名のタイプミスの可能性を排除するために、 test2関数を名前を換えずに引数の数を1つに変更してみると 計算できるのでタイプミスではないと思います。 やはり引数を複数とる取り方に問題があるように見えます。 お手数ですが何かアドバイスいただけないでしょうか?

  • access vbaで引数によって、関数を変えたい

    引数名の関数を実行したいのですが、どうすればいいでしょうか? 【やりたいイメージ】 Function 関数選択(関数) 関数選択 = 関数() ← 引数の関数が"z"の場合、"Function z()"を呼びたい End Function -------------------- 呼び出す関数 -------------------- Function a() a = "a" End Function ~ Function z() z = "z" End Function -------------------------- "Function 関数選択(関数)"の中で、ifやswich すればできると思うのですが、ずらずら書くのもうっとおしいのでスマートにしたいと思っています。 call がいいと思ったのですが、戻り値がかえせません。 何かいい方法はないでしょうか? よろしくお願いします。

  • 関数を呼んだら、その中の関数も自動実行される?

    ・関数の実行タイミングが分からないので教えてください ・下記で、どうして引数が渡るのでしょうか? ・portal関数を呼んだら、gooプロパティに無名関数が格納される(?)と思うのですが、=関数実行になるのでしょうか? ・無名関数だから? var obj = {  portal : function( arg ) {   var goo = function(arg){    console.log(arg);   }(arg);  } } obj.portal("あ"); ・自分的には、portal関数を呼んで変数gooに無名関数を格納(?)した後、明示的にgoo();と呼ぶ必要があると思うのですが… ・下記でTypeErrorエラーになるのは、gooプロパティが2回呼ばれるから? ・明示的に呼んだ2回目は引数が渡らないから? var obj = {  portal : function( arg ) {   var goo = function(arg){    console.log(arg);   }(arg);   goo();  } } obj.portal("あ"); //TypeError: undefined is not a function

  • ラジオボタンの値を取得する引数付き関数を作りたい

    フォームの入力内容をチェックするJAVASCRIPTの関数を作成していますが、ラジオボタンのValueを取得することができません。 引数指定の関数を作成して汎用的に使用したいと考えているのですが、引数を渡すと値を返してくれません。 引数の渡し方がおかしいのでしょうか? function getRadioValue(str){ // 値を取得する関数 var check, num, value="none"; num=document.form1.str.length; for (i=0;i<num;i++) { check=document.form1.str[i].checked; if (check) value=document.form1.str[i].value; } return value; } function check(){ // 入力内容をチェックする if (getRadioValue("タイプ") == "A"){ hogehoge } : : }

  • 関数名をテキストから読み込む方法(文字列比較無し)

    C言語にて開発を行っています。 今回、テキストファイルに記述された関数名および引数を読み取り、プログラム側でこれを実行する処理を実装しようと考えています。 その際、テキストから読み込んだ文字列によって処理を振り分けることを省略したいと思っていますが方法が分からず困っています。 以下が読み取る対象のテキストファイルの例です。 @function_A;arg1;arg2 @function_B;arg1;arg2 ・・・ このとき、テキストファイルから読み取った文字列に応じた関数を実行する、というところまでは実装できています。 (読み取った文字列がfunction_Aであれば、同名の関数を実行します) 現在の実装は、以下のようなイメージです。 command = "読み取った文字列(@function_Aなど)"; if(command == "@function_A"){ function_A(arg1, arg2);} else if(command == "@function_B"){ function_B(arg1, arg2);} ・・・ しかし、この実装では関数が増えるに従って if(command == "function_X"){...}をどんどん追記していく必要があります。 今後関数の数が膨大になっていく予定なので、これを追記せずに読み込んだ文字列と同名の関数を実行できるようにしたいと思っています。 以下の様なイメージです。 function_A.cというファイルに関数function_A(arg1, arg2)を実装します。 同様にして、 function_B.cに関数function_B(arg1, arg2)を実装します。 main()内にて、 char command[] = "読み取った文字列(function_Aなど)"; command(arg1, arg2); とすることによって、function_A()関数を実行できるようにすることが目的です。 もちろん、この場合のcommandはchar型ですから、上記のような記法が不可能なことは分かっていますが、似たようなことを実装したいと思っています。 どのようにすれば実装できるのでしょうか。 今後、関数の数だけfunction_A.cのようなファイルが増え、最終的に200近くになる予定ですし、 if(command == "@function_A"){ function_A(arg1, arg2);} else if(command == "@function_B"){ function_B(arg1, arg2);} ・・・ の記述忘れによる動作不良を防ぐためにもこれを実装したいと思います。

  • Perlの関数の引数について詳細

    perlで引数に関することでわからないことがあるのですが、以下の状態で、実行した際に、$aは1が入るのはわかりますが、$bには具体的にどんな値が入っているのでしょうか? 引数が無い場合は、デフォルトで1をセットしたいです。 phpのvar_dump関数のようなものがPerlには存在すれば便利ですが、そういうものはあるのでしょうか? sub test{ my ($a, $b, $c, $d) = @_; } &test(1); あと引数の数を2つは必須にして、残りの引数(3つ目はデフォルトで1つ目の引数と同じ値になり、4つ目以降はデフォルトで1となる 関数のプロトタイプを書きたいのですが、どうですればよいのでしょうか? sub test($$;@  ?のようなものを見たことがあるのですが、どんな意味をしているのでしょうか?結構複雑な引数を持たせることができそうなのですが、詳しく書かれている本などご存知の方教えてください。

    • ベストアンサー
    • Perl
  • if文での0の挙動

    phpでの簡単なif分を使った関数です。 顧客テーブルにflagを付けて、賞品Aの利用者であるか無いかを判別しています。利用者でない場合$flag=0、利用者の場合$flag=1とします。 function userlist($flag = null){ if($flag != ""){ // リストを取得するSQL文 } } とした場合、引数として$flag=0を渡すと全顧客リストが返されます。 isset,is nullも同じです。 数値での0が渡された場合はif分ではtrueが返されたと思ったのですが.....教えて頂けないでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう