• ベストアンサー

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

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

  • Tinte
  • お礼率40% (40/98)
  • PHP
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

そのまえに・・・・ if($a == 0 || $a == ''){} という条件式はいただけません。 if($a == ''){} で十分です。そうではない場合引数に文字列をあたえると $a == 0にヒットします。もしくは厳密にやるなら if($a === 0 || $a === ''){} としてください。 それを踏まえて、引数に初期値を与えると省略が可能です。 <? example(); example(0); example("hoge"); function example($a=0){ if ($a=='') print '引数なし'; else print $a; } ?>

Tinte
質問者

お礼

詳しい解説あいがとうございます。 ===と初期値の設定だったのですね。むかし勉強したことを思い出しました。。 ありがとうございます!

その他の回答 (2)

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

以下のように関数を定義しておけば function example ($a=NULL) { example(); として実行すれば $a=NULLが関数内でデフォルトで使われます example(5); として実行すれば$a=5になります

Tinte
質問者

お礼

ありがとうございます! この場合は、初期値はNULLでもいいんですね。。。。

回答No.1

関連するQ&A

  • 関数の引数に未定義の変数を渡すとエラーが出る

    自作の関数で、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
  • 関数の引数のデフォルト値について

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

    • ベストアンサー
    • PHP
  • access vbaで引数によって、関数を変えたい

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

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

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

  • 【PHP】usort()関数内の引数について

    【PHP】usort()関数内に出てくる関数の引数の意味を教えてください。 usort(ユーザー定義関数) 以下のような配列があります。ここで'score'を小さな順番(昇順)で並べ替えるためにusort()関数を使いたいと思います。 $data= [ ['name' => 'yamada', 'score'=> 80], ['name' => 'suzuki', 'score'=> 60], ['name' => 'tanaka', 'score'=> 70], ['name' => 'okada', 'score'=> 60], ]; usort( $data, function($a, $b){ if ($a['score']=== $b['score']){ return 0; } return $a['score'] > $b['score'] ? 1: -1; } ); echo "<pre>"; print_r($data); echo "</pre>"; ----------------------------------------------------------------- サンプルでは上記のように$a,$bが使用されています。 スコアの数値を比較して、あるスコアの値と別のスコアの値が同じであれば「0」を返す。$aの値が$bより大きければ「1」を返す、そうでなければ「-1」を返す。 返ってきた値、「-1」,「 0」,「 1」と小さな順に並べる… こういうことかと思います。添付画像のように表示された値も合っています。 が、functionの引数($a, $b)の意味がよくわかりません。 foreachなどでループさせ値を一つづつ比較するというよう作業を行うのであればまだ理解できるかもしれませんが、ただ単に引数に function($a, $b)…としただけでscoreの値が$a、$bにどうやって代入されていくのでしょうか?? $a, $bと記述しただけで全てのscoreの値をなぜ比較してくれるのかわかりません。 また、現在$dataの中には4つしか配列がありません。-1,0,1だけで順番をつけられるでしょうが、これが50, 100個と配列データが増えた場合でもこのやり方でできるのでしょうか? 初学者です。分かる方いらっしゃいましたら教えて下さい。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 引数について質問

    私プログラミング初心者ですので、できるだけ優しい解説をしていただければ幸いです! 引数について、以下のような解説がありました。 「引数には仮引数と実引数の2種類が存在する。仮引数は、関数を定義する際に変数で指定する引数である。また、実引数は、プログラムの実行時に関数に引き渡される値となる引数である。つまり、関数の実行時には、実引数の値が仮引数に代入されることになる。」 質問:1「関数を定義する際に変数で指定する引数である。」という記述の中で「関数を定義」とありますが、実際のソースコードにおいて何に対応するかわかりません。簡潔なソースコードを交えて解説していただければ幸いです。 質問2:「関数を定義」に限らず、プログラミングにおいて「定義」という言葉をよく見ますが、これは本質的にどういう意味をもっているのでしょうか?具体的なソースコースコードを交えて解説してくださると幸いです。 もしかして、その定義とは例えば「public static void main(String arg[]){」のような「メソッド宣言」のことですか? 質問3:「関数の実行時には、実引数の値が仮引数に代入されることになる。」と書いてありますが、 これはどういうことですか、僕が実際にソースコードで記述してみるので、その考えが正しいか判定してください package 第4章; public class A { public static void main(String arg[]){ double x; x=Math.sqrt(2.0); System.out.println("2.0の平方根は"+x); } } 僕の考え:String arg[]が仮引数で、実引数2.0がString arg[]に代入されるってことでしょうか? 「定義」といえば、上記のソースコードでは、public static void main(String arg[]){ 以外見当たらないので、、 僕の考え2:Mathクラスは、標準クラス(javaが最初から備えているクラス)だから、プログラマが「関数を定義」しなくても予め関数が定義されているから、関数を定義する必要がない、ということでしょうか?

    • ベストアンサー
    • Java
  • 関数の引数に引数を持つ関数を入れたい場合はどうすればよいのでしょうか。

    関数の引数に引数を持つ関数を入れたい場合はどうすればよいのでしょうか。 function hoge(m, l, p, h) {} (中身は省略しています。) この関数の引数「h」にhtmlを代入しようとしています。 そのhtmlには、WindowOpen()があり、そのまま代入すると「")"がありません」 エラーが発生するのですが、これは無茶なことなのでしょうか。 なんとか解決方法があれば教えていただけませんでしょうか。 「"」の時のように「\"」ではだめだったので行き詰っています。

  • php 自作関数

    PHPでfunctionによって定義される関数を作っているのですが 引数なしで関数をつくることは可能なのでしょうか? 例えば function hello{ print "HelloPhp"; } 理想ではphp側でhello関数を呼び出せばHelloPhpと出力されます 実際の使い道は関数名が使い辛いので別の名前で関数名を定義したいんです 引数を与えてもいいのですがfunction側で引数が固定されるためphp側と毎回同じ変数:引数にならない 説明し辛いのですが 先ほど述べた理由で使いたいのですが、わかる方いらっしゃったらよろしくお願いします

    • 締切済み
    • PHP
  • 関数の引数に配列を初期化なしで。

    関数の引数に配列を初期化して渡しているプログラムを目にします。 関数の引数に配列を初期化なしで渡す場合とどう違うのでしょうか? 例 <?php echo tesutoFunc(array('reservation' => 'a','user' => 'b')); function tesutoFunc($arrays=array()){ //ここをなぜtesutoFunc($arrays)と書かないのか? print_r($arrays); } ?>

    • ベストアンサー
    • PHP
  • jQueryでの、引数を取るJS関数の呼出方法

    jQueryの学習をしています。 HTML & JavaScriptで下記のように書かれているコード <input type=button id=button1 onclick=func_a() /> <script> function func1(){ //処理いろいろ } </script> は、jQueryを使って書くと、 $('#button1').live('click', func_a); このように書けます。 <input type=button id=button1 onclick=func_b(arg1, arg2) /> <script> function func_b(argument1, argument2){ //処理いろいろ } のように引数を取る関数は jQueryではどのように書けばよいのでしょうか? $('#button1').live('click', func_b(arg1, arg2)); とは書けなかったので、今は、 if (arg1 == xxx){ $('#button1').live('click', func_b_1_1); } else { $('#button1').live('click', func_b_1_2); } などのように引数別に同じような関数を創って書いています。 DRY原則という同じコードを二度書くなという約束もあるようなので、 きっといい方法があると思うのですが、 お詳しい方、教えていただけるとうれしいです。 どうぞ、よろしくお願いいたします。

専門家に質問してみよう