• ベストアンサー

if文について

次のようなコードがあった場合、常に戻り値は false になってしまうのですが、$xxxが返る時もあるのでしょうか? というか、これはあるサンプルを簡単にしたものなのですが、$xyz==falseが真の時、$xxxが返っています。 どう考えたらいいのでしょうか? function abc(){   if($xyx==false){     return $xxx;   }   return false; }

  • PHP
  • 回答数5
  • ありがとう数3

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

  • ベストアンサー
  • pokepotto
  • ベストアンサー率31% (21/67)
回答No.5

下記のように xyzがfalse が真であれば 戻り値はxxx そうでなければ 戻り値はfalseと 読み替えることができるので補足の記述と 質問の記述は同様であるといえます。

その他の回答 (4)

  • pokepotto
  • ベストアンサー率31% (21/67)
回答No.4

あっと、こう書いたほうがわかりいいですね。 修正します。 (1)条件を判定、xyzがfalseが真なら(2)が実行される >修正 (1)条件を判定、xyzがfalseが真なら (2)xxxを返し、関数を抜ける

  • pokepotto
  • ベストアンサー率31% (21/67)
回答No.3

補足に解答しますね。 同様と考えていいです。 以下、参考になるでしょうか? function abc(){   if($xyx==false){(1)     return $xxx;(2)   }   return false;(3) } (1)条件を判定、xyzがfalseが真なら(2)が実行される (1)の判定xyzがfalseが真でないのなら、そのまま if文を抜け(3)が実行される

abcxyz3000
質問者

お礼

わかりました。 ずーっとVBをやっていたもので、感覚がよくつかめませんでした。 VB的に考えると、どっちに転んでも、(3)が実行されると思うんですよね。 むしろ、偽の時の処理を else で分岐させた方が読みやすいかなーっと思いましたが、今後は慣れていかないといけないですね。

回答No.2

>$xyz==falseが真の時、$xxxが返っています。 >  if($xyx==false){ えーと、変数名が違ってるのが 原因じゃないよね。

abcxyz3000
質問者

補足

その先に$xyzに値を取得するプロセスがあって、その際に、データファイル(txt)から、配列を取り込んでいるようです。 データがあれば、そのデータ、なければfalseを返すようになっていました。

  • pokepotto
  • ベストアンサー率31% (21/67)
回答No.1

>次のようなコードがあった場合、常に戻り値は false になってしまうのですが、$xxxが返る時もあるのでしょうか? もちろん、あります。$xyx==falseが真のときです。 常に戻り値がfalseになってしまうということは if文の条件が満たされて$xxxを返すことがないということです。 if文の条件を満たしてあげれば$xxxは返ります。

abcxyz3000
質問者

補足

次の意味と同じなんでしょうか? function abc(){   if($xyx==false){     return $xxx;   }else{     return false; }

関連するQ&A

  • javascript 一回目実行

    失礼します現在一回目だけ処理したい内容があり、サンプルコードを探してみたのですが、 処理の流れがわからない状態です汗 ご教授頂けると助かります //即時関数 var trueOnlyFirstTime = (function(){ var b = true; //戻り値として関数を実行する return function(){ if(b){ b = false; return true; } return false; }; })();

  • Perl 戻り値の型の判定って出来ますか?

    Perlは引数でのOUTを返せないと認識してます。 ※ここで間違っていたらご指摘下さい。 そのために下記のように、違った型(スカラー変数または配列)を返すように切り替えた場合に呼び側はどのように判定すれば良いのでしょうか?教えて下さい。 $result = sample(); sub sample{ $abc = "abc"; @xyz = qw(x y z); if(){ return $abc; } if(){ return @xyz; } return 0; }

    • ベストアンサー
    • Perl
  • 戻り値必要なし

    JavaScript初心者です。 戻り値なしの関数について。return とreturn falseでは何か違うのでしょうか? function test(){ if(flag) return; var num=1+2; } function test2(){ if(flag) return false; var num=1+2; } よろしくお願いします。

  • If文を2つ並べると2つ目の文が実行されない。

    プログラムの中で*A*のIf文は実行されますが、*B*のIf文は実行されません。 何故でしょうか?教えて下さい。 ちなみに、<中略>の部分にもIf文は同じ様にあります。(内容は違うけど) <SCRIPT language="javascript"><!-- function ka() { ******<中略>****** *A* if (document.fomu.email.value ==""){        alert ("メールアドレスを記入して下さい。");        fomu.email.focus();        return false; } *B* if (document.fomu.email.value.match(/\w+@\w+/){        alert ("正しくメールアドレスを記入して下さい。");        fomu.email.focus();        return false; } ******<中略>******* } //--></SCRIPT>

  • if文の中で否定演算子を使うことについて

    PHPの勉強をしています。 今、基礎的な内容の本とより実践的な内容の本、コードサンプルが満載の本の 計3冊で勉強しておるのですが、 たまたまなのかわかりませんが、この三冊の中ででてくるコードを見てみると、 if文の中に否定演算子、例えば IF(!A || !B) {   A、もしくはBがfalse だったのが反転してTrueになった場合の処理 }else {   A、Bどちらともtrueだったのが反転してfalseになった場合の処理 } といった条件文に否定演算子を含めたコードサンプルがほとんどです。 。。。。三冊ともこの調子なので もしかしてPHPのコーティング作法なのかな?と思いましたが ネットで検索してもそれらしい情報は見当たらず...... 自分が何がわからないのか それ自体よくわかってないのかもしれませんが IF文を使う際、条件に否定演算子を使うべきときってのがあるんだと思います。 となると、その時を判断する基準などがあるのでしょうか? 初心者なのでなにか重大な思い違いをしてるのではないかと思ってます。 なにか気づくことがあれば教えてください。

    • ベストアンサー
    • PHP
  • if文がifにならない?

    よろしくお願いします。 連続投稿防止の為に、getenvで取得したIPアドレスと time()で取得した時間をcsvファイルに xxx.xxx.xxx.xxx<>1249494949 xxx.xxx.xxx.xxx<>1249494949 という風に記述をしてます。 具体的には、 <?php $ipdesu = "./ip.csv"; $ipgetdesu = getenv( "REMOTE_ADDR"); $times = time(); $hoge = 0; $roop_open = fopen( $ipdesu, "r"); while(! feof($roop_open)){ $roop_get = fgets( $roop_open); $roop_ex = explode( "<>", $roop_get); $hogehoge = $hoge++; //IPチェック if( in_array( $ipgetdesu, $roop_ex)){ echo "配列検索TRUE"; //時間チェック if ( "60" < $times - $roop_ex[1]){ $fp = file( $ipdesu); unset( $fp[$hogehoge]); $fp_open = fopen( $ipdesu, "w"); foreach ( $fp as $value){ fputs( $fp_open, $value); } fclose( $fp_open); }else{ echo "連投規制"; } }else{ $fal_open = fopen( $ipdesu, "a"); fputs( $fal_open, $ipgetdesu."<>".time()."\n"); fclose( $fal_open); echo "配列検索FALSE"; } } fclose( $roop_open); ?> と記述しています。 <まだ、始めたばかりなのでロック制限とかしてませんがそこはご勘弁を 上記を実行すると、if ここ else そこ の本来、真であれば「ここ」が 偽であれば「そこ」だけが実行されると思っていたのですが、 上記の実行結果は、「ここ」も「そこ」も実行されてしまい かつ、IPを記述したファイルの検索が2回め実行した時に 同じIP 127.0.0.1<>時間 127.0.0.1<>時間 とローカルで試してるのでIPが変更になるはずないのですが(DHCPは念の為しようしていません in_arrayでヒットしないのは何故でしょうか? また、ifが正しく動作しないのは多重ifとでも言えばいいのでしょうか? が悪いからでしょうか。 つたないソースで申し訳ないですが、どうかよろしくお願いします。

    • ベストアンサー
    • PHP
  • Aタグでサブミットさせない方法

    以下のようにjavascriptでサブミットを制御したい場合、 return falseとしてもサブミットしてしまいます。 Aタグにおいてサブミットさせないためには どうすればよいのでしょうか。よろしくお願いします。 <a href="xxx/yyy" onclick="func();"> function func(){ var ret = confirm("xxxxxxxxx"); if(ret == false) { return false; } }

  • &と|の演算子を使ったif文のプログラムについて

    ↓のプログラムの実行結果について質問します。 public class Test{ public static void main(String args[]){ if(methodA() & methodB() ){ System.out.print(1); }else{ System.out.print(2); } if(methodA() | methodB() ){ System.out.print(3); }else{ System.out.print(4); } } private static boolean methodA(){ System.out.print("A"); return false; } private static boolean methodB(){ System.out.print("B"); return true; } } 上記のプログラムを実行すると AB2AB3 と出力されるのですが、 何故こういう風になるのか教えていただけませんか? また、if文の中をそれぞれ if(methodA() & methodB() ) if(methodA() | methodB() ) と書き換えると A2A3 となるのですが、これについてもイマイチよく分かりません。 メソッドからfalseとtrueを戻り値として受け取り 演算子によって処理を分けているんでしょうけど、 どういう流れで処理が行われているのか 出力結果を見ても読めなくて・・・

    • ベストアンサー
    • Java
  • return trueとreturn falseの用途・違いは・・・?

    functionやifなどで「return true」「return false」というのを見かけますが、これの違いを教えてください。あと最近 if(!obj){ return true; } という文を見かけました。 これがifじゃなくてfunctionなら、ブール値が返るのでtrueとfalseの違いがありますが、このifではなぜreturn trueを使っているのか分かりません。「return false」を書くと、ifやfunctionを強制的に抜ける「break」と同じ役割を果たすと聞いた事がありますが、trueは知りません。 ・・・というより、ifでreturnを使う意味もよく分からなくなってきました。 if文は何も返りませんし、返したところで受け取る方法がありませんよね? これもどういう意味なのか、教えてください。 よろしくお願いします。

  • javascriptの関数につきまして

    javascriptの関数につきまして javascriptの関数につきましての質問です。 Daycheck()関数 function Daycheck(year, mon, day){ maxDayOfMonth = Array( 31,29,31,30,31,30,31,31,30,31,30,31 ); if (year < 1901 || 2200 < year) return false; if( mon < 1 || mon > 12 ) return false; if( day < 1 || day > maxDayOfMonth[mon-1] ) return false; if( mon != 2 ) return true; if( day < 29 ) return true; if( ( year % 4 ) == 0 && ( year % 100 ) != 0 ) return true; if( ( year % 400 ) == 0 ) return true; return false; } というサンプルソースを見たのですが、Daycheck()の中のif( mon != 2 ) return true;とは2月以外が選択されていた場合trueを返す。 つまり、2月は選択できないということでしょうか? プログラミングについて詳しい方がいらっしゃりましたらご指導お願いします。 宜しくお願い致します。

専門家に質問してみよう