No.1ベストアンサー
- 回答日時:
本当に三項演算子を理解しています?
条件?正の戻り値:偽の戻り値
printは戻り値をもっていて、echoは戻り値をもっていません。
なので戻り値のないechoをしていするとエラーになるのでしょうね
もちろん$sex=1は代入していて正を返しますので三項演算として意味がないですね
$sex==1を使う認識でしょうけど、キャストのことを考えれば$sex===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'; // 命令を変更
?>
---
動いたのはこういう理由からだと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) awkの正規表現での最左最短マッチング 3 2022/07/01 00:10
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP preg_matchで Warning: Undefined variableが出ます 1 2022/11/15 17:06
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- PHP php エラー 2 2022/10/23 16:43
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Dosブロンプトでtabを出力したい
-
バッチファイルでpingの結果を...
-
findstrのerrorlevel
-
phpでcookieがうまく保存されない
-
switch()文で値の大小比較
-
ifの条件(不等号)を動的に埋...
-
バッチファイルで、全てのウィ...
-
syntax error, unexpected 'ech...
-
batファイルでPC名称の変更
-
DBのハッシュ化したパスワード...
-
Windowsのsetコマンドでの小数...
-
bashの関数の引数にスペースが...
-
XMLのタグの有無をPHPで判定し...
-
switch文の中でforeach
-
shシェルスクリプト 空白行の...
-
ヒアドキュメントと、htmlspeci...
-
連想配列からテーブルを作成す...
-
コマンドプロンプト フォルダ内...
-
カレンダーについて教えてくだ...
-
PEAR HTTP_Requestでのヘッダ送信
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Dosブロンプトでtabを出力したい
-
switch()文で値の大小比較
-
バッチファイルでpingの結果を...
-
shシェルスクリプト 空白行の...
-
phpでcookieがうまく保存されない
-
findstrのerrorlevel
-
syntax error, unexpected 'ech...
-
小数点以下0の非表示
-
バッチファイルで、全てのウィ...
-
オブジェクトの中身の判定(PHP)
-
PHPで訪問回数を表示するカウン...
-
ゼロとNULLを区別して number_f...
-
bashの関数の引数にスペースが...
-
ナベアツプログラム(3の倍数...
-
変数の受け渡しによる画像の表示
-
PHP一覧表示した項目にリンクを...
-
Windowsのsetコマンドでの小数...
-
Parse error というエラーの対...
-
pdftkを使った処理をバッチファ...
-
DBのハッシュ化したパスワード...
おすすめ情報