$argv[1]) && $argv[1]・同じ

このQ&Aのポイント
  • $argv[1]) && $argv[1]のプログラムの実行結果は、「引く数が与えられていないか、与えられた引数が真ではありません」となりました。この結果は、与えられた引数が真でない場合に表示されるメッセージです。
  • このプログラムは、与えられた引数が真であるかどうかを判定するものです。もし与えられた引数が真であれば、「与えられた引数は真です」と表示されます。
  • しかし、プログラムの条件式が「$argv[1]) && $argv[1]」となっているため、引数が真でない場合には判定結果が偽となり、「引く数が与えられていないか、与えられた引数が真ではありません」と表示されます。
回答を見る
  • ベストアンサー

$argv[1]) && $argv[1]・同じ

 以下のプログラムですが! <html> <head> <meta "charset=utf-8" /> <title>論理演算子</title> </head> <body> <?php if(isset($argv[1]) && $argv[1]) { echo '与えられた引数は真です',PHP_EOL; } else{ echo '引く数が与えられていないか、与えられた引数が真ではありません' ,PHP_EOL; } ?> </body> </html> 以上のプログラムの実行結果は以下となりました。    引く数が与えられていないか、与えられた引数が真ではありません 以上の実行結果は”真でありません”と出ています。    $argv[1]) && $argv[1]・・・&&は理論積の、両辺は同じなのでtrueならばtrueの真だから、  "与えられた引数は真です"と出るのではないんでしょうか!?  以上よろしくお願いします。

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

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

  • ベストアンサー
noname#244856
noname#244856
回答No.1

【Webブラウザから実行した】 変数 $argv に値を格納する手段がないので、elseブロックしか実行されません。 【コマンドラインから実行した】 第1引数は $argv[1] として格納されます。もしそれが真と評価される文字列であった場合、ifブロックが実行されます。偽と評価される文字列であったもしくは引数を何も渡さなかった場合、elseブロックが実行されます。 >> $argv[1]) && $argv[1]・・・&&は理論積の、両辺は同じなのでtrueならばtrueの真だから、 メチャクチャです。分割するところもおかしいですし…もとより、 「ソースコードを比較しているのではない」 と言ったほうがいいでしょうか。もし 「どっちも $argv[1] と書かれているから $argv[1] && $argv[1] は常に真となる」 と言うのであれば、プログラミングの根幹となっている “変数” の概念すら否定することになりますよね。変数で重要なのは変数名ではなくてそこに格納された値です。 (PHPの場合は変数名が重要になることもありますが、このシーンでは関係ありません)

Campus2
質問者

お礼

 毎同 ご回答誠にありがとうございました。  きむづいですね_ _   最初のご回答様に補足しましたが、レスがございませんでしたので、   再度レスを立ち上げます。 とりあえず、解決とさせていただきます。  今後ともよろしくお願いいたします^^      

その他の回答 (1)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

>$argv[1]) && $argv[1] この切り方がそもそもダメダメです。&&の直前の閉じ括弧に対応する括弧がありますよね。 >isset($argv[1]) && $argv[1] isset($argv[1]) と、$arg[1] の論理積です。けっして >両辺は同じ ではありません。 $arg[1] という変数が存在し、NULL以外の値であり(isset($arg[1]))、なおかつ$arg[1] が空文字列や"0"ではない(論理値として真の値になる)ときに『与えられた引数は真です』となります。 そもそも$arg[1] という変数が存在しない状態では『引数が与えられていない』ことになります。 当然ですが、issetでチェックしないと変数が存在しないときにUndefined variablesのwariningになります。外部から与えられる変数は存在するかどうかをissetでチェックせず扱ってはいけません。

Campus2
質問者

補足

 ありがとうございます。   ”与えられた引数は真です”  と出すには、どんなプログラムを組めば出るのでしょうか!?  よろしくお願いします。  

関連するQ&A

  • どうしたら確認ができますか!?

    以下参考書をそまま入力しました。 ] ---------------------------------------------------  論理積と論理和では、2通りの表記方法がありますが、これは演算子の優先順位(注6)が違います。 (注意6)優先順位については3.2.3(P80)を参照 <?php $flag and foo(); if(isset($argv[1] && $argv[1] { echo '与えられた引数は真です',PHP_EOL; } else{ echo '引数が与えられていないか、与えられた引数が真ではありません' ,PHP_EOL; }  この列では、引数が与えられているかをまずチェックし、与えられている場合はそれが真である かを調べます。論理演算子では、評価結果がわかった時点で演算結果を返します。これを短絡評価 といいます。短絡評価されるため、最初のisset($argv[1])が為である場合、次の$argv[1]の評価 は一切行われません(もし評価されてしまったならば、NOtic:Undefined offset:1となってしまい ます)。  たとえば、次の例では、$flagが為の場合では、関数foo()が呼ばれることはありません。 <?php $flag and foo();   ----------------------------------------------------------- 以上ですが、 これって、どうしたら確認ができますか!?   xamppは働いています。    HTMLで試しましたがParseエラーがでました。 <html> <head> <meta "charset=utf-8" /> <title>論理演算子</title> </head> <body> <?php if(isset($argv[1] && $argv[1] { echo '与えられた引数は真です',PHP_EOL; } else{ echo '引く数が与えられていないか、与えられた引数が真ではありません' ,PHP_EOL; } ?> </body> </html> 以上の実行結果は 以下です。 Parse error: syntax error, unexpected '&&' (T_BOOLEAN_AND), expecting ',' or ')' in C:\xampp\htdocs\study.localhost\php.php on line 10  以上です。    よろしくお願いします。  

    • ベストアンサー
    • PHP
  • = $argv[1];はどんな働きがありますか!?

    <?php // stringcast.php if (!isset($argv[1])) { exit; } $num = $argv[1]; if ($num == 100) {  ←(1) echo "num is 100", PHP_EOL; } else { echo "num is not 100",PHP_EOL; } このプログラムを %php stringcast.php100 のように実行する、引数の100はPHP文字列型として渡されます。  したがって、(1)の比較では、文字列"100"の入って変数$numと、整数100が比較されるため、 文字列"100"は整列100へとキャストされまた後、比較演算が実行されます。  今回は、動作の結果に違いはありませんが、ここで整数同士を比較しているつもりでも実際には 文字列を整数の比較が行われ、キャストが発生している、という挙動を把握しているか、していない かではなく大きな違いがあります。引数とし期待している値の型が決まっている場合、明示的にキャ ストを行い、厳密な比較演算子(===など)を用いるほうが安全です。 -------------------------------------------------------- 以上、参考書をまるごと入力しました。  そこで $num = $argv[1];で!$argv[1]とはこのプログラムではどんな働きがあるのでしょうか!?  ($argv[1];を$numに代入だと思います。間違っていたなら御免なさい。)  宜しくお願いします。  なお・批判的なご回答はお控えくださいませ。  

    • ベストアンサー
    • PHP
  • $argv[1] の真偽判定

    PHPの勉強を始めた初心者です。 次のようなスクリプトを書いてみたのですが、false と入力しても、真と判定されてしまいます。 何故こうなるのか、お教えいただければ幸いです。 <?php // p075_a.php if( isset($argv[1]) && $argv[1] ) { echo "与えられた引数は真です\n"; } elseif ( isset($argv[1]) && !$argv[1] ) { echo "与えられた引数は偽です\n"; } else { echo "引数が与えられていません\n"; } [study_php@localhost ch03]$ php p075_a.php '' 与えられた引数は偽です [study_php@localhost ch03]$ php p075_a.php "" 与えられた引数は偽です [study_php@localhost ch03]$ php p075_a.php 0 与えられた引数は偽です [study_php@localhost ch03]$ php p075_a.php 0.0 与えられた引数は真です [study_php@localhost ch03]$ php p075_a.php false 与えられた引数は真です [study_php@localhost ch03]$

    • ベストアンサー
    • PHP
  •  %php stringcast.php 100

    <?php // stringcast.php if (!isset($argv[1])) { exit; } $num = $argv[1]; if ($num == 100) { echo "num is 100", PHP_EOL; } else { echo "num is not 100",PHP_EOL; } このプログラムを %php stringcast.php 100のように実行すると、引数の100は PHPには文字列型として渡されます。・・・  以上参考書にあります。  作業の流れが分かりません。  %php stringcast.php 100とは!何のことなのでしょうか!?  以上宜しくお願いします。

    • ベストアンサー
    • PHP
  • echo (float)'1e2foo', PHP

    echo (float)'15foo', PHP_EOL; echo (float)'15.33foo', PHP_EOL; echo (float)'1e2foo', PHP_EOL; echo (float)'foo', PHP_EOL; 以上参考書を転記しました 試しに echo '<pre>'; echo (float)'15', PHP_EOL; echo (float)'15.33', PHP_EOL; echo (float)'1e2', PHP_EOL; echo (float)'', PHP_EOL; echo '</pre>';  とfooを省きました、二つのプログラムの実行結果は 以下ですがと同じです。 15 15.33 100 0   一つ目の質問です。   なぜ、参考書はfooをあえて入れてのでしょうか? 二つ目の質問です。  1e2を1e3にすると結果が1000になります。  1eて何ですか!?    宜しくお願いします。

    • 締切済み
    • PHP
  • ブラウザ上に出せますか!?

    echo (float)'15foo', PHP_EOL;   // 15 echo (float)'15.33foo', PHP_EOL; // 15.33 echo (float)'1e2foo', PHP_EOL; // 100 (1e2) echo (float)'foo', PHP_EOL; // 0 以上ですが、  ブラウザ上に結果を出せますか!? もし、ブラウザ上に出すには、後!どんなプログラムが必要ですか!? 分かりません、宜しくお願いします。

    • ベストアンサー
    • PHP
  • 型変換プログラムで

      以下の型変換プログラムで質問です!? PHPレベルは下の下です。 <html> 1 <head> 2 <title>型変換</title> 3 </head> 4 <body> 5 <?php 6 $var = TRUE; 7 print (gettype($var). "<br />"); 8 $var=100; 9 print (gettype($var). "<br />"); 10 $var=100.001; 11 print (gettype($var). "<br />"); 12 $var="TRUE"; 13 print  (gettype($var)); 14 ?> 15 </body> 16 </html>   以上ですが、result(実行結果は)以下です。  boolean integer double string  以上の実行結果で疑問に思うことは、 同じ変数のTRUEでありながら プログラムの6の実行結果の”boolean”と   プログラム12の”string”の実行結果と違いがあるのはなぜですか!?  ※agunuz 回答禁止    宜しくお願いします。

    • ベストアンサー
    • PHP
  • $a = new SomeClass();

    <html> <head> <meta "charset=utf-8" /> <title>P76instanceof.php</title> </head> <body> <?php class SomeClass { } $a = new SomeClass(); if ($a instanceof SomeClass){ echo'$aは SomeClass のインスタンスです',PHP_EOL; } ?> </body> </html>    以上ですが!  $a = new SomeClass();のnewの役割を教えてくだい  よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPからCプログラムを実行して実行結果をHTML上に表示

    PHP初心者です。PHPからCプログラムを実行して実行結果をHTML上に表示する方法が分からなく困っています。 Cプログラムの中身は、 #include <stdio.h> int main(){ printf("Hello."); } です。 phpの中身は、 <HTML> <HEAD><TITLE>Cプログラム呼び出し</TITLE></HEAD> <BODY> <?php $cmd = "test.exe"; $a = exec($cmd); echo $a; ?> </BODY> </HTML> としており、調べてみるとexec()関数で外部プログラムを実行すると書いてあったのでこのように作成しました。

    • ベストアンサー
    • PHP
  • エラーが出ないようにしたいのですが?

    <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php echo'テストプログラム開始',PHP_EOL; $ret1 = array_reverse(); $ret2 = array_reverse(1); echo'テストプログラム終了',PHP_EOL; ?> </body> </html>  以上のプログラムを実行すると、  以下のエラーが出るように組まれたプログラムです。   エラーが出ないプログラムにするには、どんなプログラムを組めばできますか!?   早々ですが^^    今年もよろしくお願いいたします。 テストプログラム開始 Warning: array_reverse() expects at least 1 parameter, 0 given in C:\xampp\htdocs\study.localhost\E_WARNING.php on line 9 Warning: array_reverse() expects parameter 1 to be array, integer given in C:\xampp\htdocs\study.localhost\E_WARNING.php on line 10 テストプログラム終了

    • ベストアンサー
    • PHP