アプリ版:「スタンプのみでお礼する」機能のリリースについて

 以下のプログラムですが!

<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の真だから、

 "与えられた引数は真です"と出るのではないんでしょうか!?

 以上よろしくお願いします。

A 回答 (2件)

【Webブラウザから実行した】



変数 $argv に値を格納する手段がないので、elseブロックしか実行されません。


【コマンドラインから実行した】

第1引数は $argv[1] として格納されます。もしそれが真と評価される文字列であった場合、ifブロックが実行されます。偽と評価される文字列であったもしくは引数を何も渡さなかった場合、elseブロックが実行されます。


>> $argv[1]) && $argv[1]・・・&&は理論積の、両辺は同じなのでtrueならばtrueの真だから、

メチャクチャです。分割するところもおかしいですし…もとより、

「ソースコードを比較しているのではない」

と言ったほうがいいでしょうか。もし

「どっちも $argv[1] と書かれているから $argv[1] && $argv[1] は常に真となる」

と言うのであれば、プログラミングの根幹となっている “変数” の概念すら否定することになりますよね。変数で重要なのは変数名ではなくてそこに格納された値です。

(PHPの場合は変数名が重要になることもありますが、このシーンでは関係ありません)
    • good
    • 0
この回答へのお礼

 毎同
ご回答誠にありがとうございました。
 きむづいですね_ _

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

お礼日時:2014/04/13 11:38

>$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でチェックせず扱ってはいけません。

この回答への補足

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

 よろしくお願いします。
 

補足日時:2014/04/12 16:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!