• ベストアンサー

三項演算子/echoとprintの違い

<?php $sex=1 ? echo "男性" : echo "女性"; ?> だと、下記エラーになりました。 Parse error: syntax error, unexpected T_ECHO 試しに、 <?php $sex=1 ? print "男性" : print "女性"; ?> としたところ、無事表示されました。 echoとprintって同じだと認識していたのですが、 何が違うのでしょうか? あと、$sex=1ではなく、 $sex==1とした方がよいのでしょうか?

  • re999
  • お礼率61% (476/777)
  • PHP
  • 回答数2
  • ありがとう数4

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

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

本当に三項演算子を理解しています? 条件?正の戻り値:偽の戻り値 printは戻り値をもっていて、echoは戻り値をもっていません。 なので戻り値のないechoをしていするとエラーになるのでしょうね もちろん$sex=1は代入していて正を返しますので三項演算として意味がないですね $sex==1を使う認識でしょうけど、キャストのことを考えれば$sex===1とすべきでしょう

re999
質問者

お礼

ありがとうございました。

その他の回答 (1)

回答No.2

参考演算子は式です。 マニュアルでは、 --- (expr1) ? (expr2) : (expr3) という式は、 式1 が TRUE の場合に 式2 を、 式1 が FALSE の場合に 式3 を値とします。 PHP 5.3 以降では、三項演算子のまんなかの部分をなくすこともできるようになりました。 式 expr1 ?: expr3 の結果は、expr1 が TRUE と同等の場合は expr1、 それ以外の場合は expr3 となります。 --- とあります。 $v=1は、代入です。 上記のプログラムは<?php ?>で完結しているので、$sex=1という式は$sex変数に1を代入することになります。この代入も一応評価されるはずです。なので文法違反にはなっていないのでしょう。 $sex==1に変更しなければなりませんが、元の$sex変数に何の値も代入されていないので結果は不定になりそうです。 まずどこかで$sexの値を決めないと正しくありませんしトラブルのもとになります。 echoについて: --- echo() は実際には関数ではありません (言語構造です)。このため、使用する際に括弧は必要ありません。 (いくつかの他の言語構造と異なり) echo() は関数のように動作しません。 そのため、 関数のコンテキスト中では常に使用することができません。 加えて、複数のパラメータを指定して echo() をコールしたい場合、括弧の中にパラメータを記述してはいけません。 --- 例えば、 <?php $sex = 0; echo ($sex == 1) ? "男性" : "女性"; ?> であれば正しく動くはずです。 echo $a+1; みたいなかんじです。 (カッコはなるべくつけたほうがいいです。優先順位がわかりやすいからです) ついでに、、、マニュアルから抜粋。 --- // echo は関数のように動作しないので、以下のコードは正しくありません ($some_var) ? echo 'true' : echo 'false'; // しかし、次の例は動作します ($some_var) ? print 'true' : print 'false'; // print も言語構造ですが、 // 関数のように動作します。なので、 // このコンテキスト中で使用できます echo $some_var ? 'true': 'false'; // 命令を変更 ?> --- 動いたのはこういう理由からだと思います。

re999
質問者

お礼

詳しい説明ありがとうございました。

関連するQ&A

  • echo での 変数の扱い方について

    phpでの 下記のスクリプトについて、エラーが出てしまいす。エラー内容は 「syntax error, unexpected '"' 」 というものです。 echo "<input type=\"hidden\" name=\"page_num\" value=\".($page_num-1).\">"; これは、<input type="hidden" name="page_num" value="page_num-1"> を echoで 表記しようとしたものですが、どこが間違っているのか。 おそらく、$page_num-1 の変数の扱いに問題があるようなんですが、 どのように書けばいいでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 【初歩】 極単純なFOR文がなぜ「parse error」になるのかわかりません…

    下記のサンプルが,どう見直しても Parse error: parse error, unexpected T_VARIABLE in C:\hoge.php on line 2(2行目とは$str1 = "1";のこと). となってしまうのですが,なぜでしょうか. 下記は質問向けにアレンジしたものですが 本番環境の方では少しメッセージが異なり: Parse error: parse error, unexpected T_FOR in C:\hoge.php on line xxx. と,まあいずれでもエラーになってしまうのですけど・・・ <? php $str1 = "1"; $str2 = "2"; $str3 = "3"; for ($Num = 1; $Num <= 3; $Num++) { echo ${"str" . $Num}; } ?>

    • ベストアンサー
    • PHP
  • phpと<?xml version="1.0" encoding="utf-8"?>

    phpファイルの頭に<?xml version="1.0" encoding="utf-8"?>を入れると Parse error: syntax error, unexpected T_STRING in ・・・ というエラーが出ます。 なぜでしょう?

    • ベストアンサー
    • PHP
  • クラス内での二次元配列への値の代入について

    以下のソースで、配列変数$a[0][0]にbを代入して、メソッドprintAでそれをprintしようとしていますが、"Parse error: syntax error, unexpected '$a' (T_VARIABLE), expecting function (T_FUNCTION) in C:\xampp\htdocs\a.php on line 4"というエラーが出ます。 どうすれば、$a[0][0]にbを代入して、メソッドprintAでそれをprintできるか教えてください。 phpのバージョンは5.5.15です。 <?php class A{ private $a = array(); $a[0][0] = 'b'; function printA(){ print $this->a[0][0]; } } $x = new A(); echo $x->printA(); ?>

    • ベストアンサー
    • PHP
  • Parse error: syntax error, unexpected T_STRING in・・・118と出るのですが

    Parse error: syntax error, unexpected T_STRING in 。。。 on line 118 とでるのですが対処はどうすればよろしいでしょうか?

    • ベストアンサー
    • PHP
  • php 何故、エラー???

    いつもお世話になりありがとうございます。 標記の件。 $subject = "お仕事に関するお問い合わせ"; がエラーになってしまいます。 PHP Syntax Check: Parse error: syntax error, unexpected variable "$subject" in your code on line 2 全体のコードは下記です。 <? php $subject = "お仕事に関するお問い合わせ"; $body = "お見積の件で、連絡をしました。"; ?> <!doctype html > <html > <head > <meta charset =" utf-8"> <title>お問い合わせ</title> </head> <body> <h1><? php echo $subject ?></h1> <p><? php echo $body ?></p> </body > </html > どうして2行目がエラーになるのでしょうか? どうか教えてください。 ご回答のほど宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • smartyについて教えてください。

    smartyについて教えてください。 エラーメッセージ Parse error: syntax error, unexpected T_STRING in C:\xampp\htdocs\smarty\hello\index.php on line 8 の意味を教えていただけませんでしょうか? よろしくお願いいたします。

  • 連想配列を含むヒアドキュメントの書き方

    連想配列を含むヒアドキュメントの書き方を教えてください。 以下のコードならうまく行きました。 -(1)-------------------------- $SS = $_SERVER['PHP_SELF']; $html_txt = <<<EOT ($SS) EOT; echo $html_txt; ------------------------------ これを一時的な変数を使わずに以下のようなコードで実行したいです。 -(2)-------------------------- $html_txt = <<<EOT ($_SERVER['PHP_SELF']) EOT; echo $html_txt; ------------------------------ これを実行すると # Parse error: syntax error, unexpected '"', # expecting T_STRING or T_VARIABLE or T_NUM_STRING in … というエラーが出てしまいます。 最悪、(1)でもいいと思っています。しかし(2)のようなケースでもできてもいいのではないかと思うのですが、エスケープを入れたり「$_SERVER["PHP_SELF"]」などとクォーテーションを変更したりしてもうまく行きません。 質問は以下です ・(2)のような記述はPHPでは不可能なのでしょうか? ・もし可能なら(1)の何が悪いのか、どうすればうまく行くのかを教えてください よろしくお願いします。

    • ベストアンサー
    • PHP
  • 詳しい方

    あるブログサイトを閲覧しようと思い、アクセスするのですが、下記の様な文字しか出てきません。 Parse error: syntax error, unexpected T_STRING in /home/blog.minblo.com/public_html/lib/plugins/function.banner.php on line 17 何度 アクセスしても同じです。 何が原因なんでしょうか?

  • constでパースエラー

    <?php class hoge { const MOGE = 'moge'; function poge() { echo 'poge'; } } ?> なコードを書くと、 Parse error: syntax error, unexpected T_CONST, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in ...\test.php on line 5 とのエラーがでます。 constの部分をコメントアウトすればエラーはでません。 環境は、WindowsのXAMPP環境で、PHPのバージョンを4に変更してテストしているところなのですが... PHP Version 4.4.8 Apache/2.2.8 PHP5の環境では、正常に動作しました。 よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう