- ベストアンサー
$argv[1]) && $argv[1]・同じ
- $argv[1]) && $argv[1]のプログラムの実行結果は、「引く数が与えられていないか、与えられた引数が真ではありません」となりました。この結果は、与えられた引数が真でない場合に表示されるメッセージです。
- このプログラムは、与えられた引数が真であるかどうかを判定するものです。もし与えられた引数が真であれば、「与えられた引数は真です」と表示されます。
- しかし、プログラムの条件式が「$argv[1]) && $argv[1]」となっているため、引数が真でない場合には判定結果が偽となり、「引く数が与えられていないか、与えられた引数が真ではありません」と表示されます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
【Webブラウザから実行した】 変数 $argv に値を格納する手段がないので、elseブロックしか実行されません。 【コマンドラインから実行した】 第1引数は $argv[1] として格納されます。もしそれが真と評価される文字列であった場合、ifブロックが実行されます。偽と評価される文字列であったもしくは引数を何も渡さなかった場合、elseブロックが実行されます。 >> $argv[1]) && $argv[1]・・・&&は理論積の、両辺は同じなのでtrueならばtrueの真だから、 メチャクチャです。分割するところもおかしいですし…もとより、 「ソースコードを比較しているのではない」 と言ったほうがいいでしょうか。もし 「どっちも $argv[1] と書かれているから $argv[1] && $argv[1] は常に真となる」 と言うのであれば、プログラミングの根幹となっている “変数” の概念すら否定することになりますよね。変数で重要なのは変数名ではなくてそこに格納された値です。 (PHPの場合は変数名が重要になることもありますが、このシーンでは関係ありません)
その他の回答 (1)
- agunuz
- ベストアンサー率65% (288/438)
>$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でチェックせず扱ってはいけません。
補足
ありがとうございます。 ”与えられた引数は真です” と出すには、どんなプログラムを組めば出るのでしょうか!? よろしくお願いします。
お礼
毎同 ご回答誠にありがとうございました。 きむづいですね_ _ 最初のご回答様に補足しましたが、レスがございませんでしたので、 再度レスを立ち上げます。 とりあえず、解決とさせていただきます。 今後ともよろしくお願いいたします^^