PHPの質問です。2つ質問させてください。


1)
$tags = (is_array($_GET['tag'])) ? $_GET['tag'] : array($_GET['tag']);

これが何をしているのかわかりません。途中で?がありますが、これは何なのでしょう。

2)
if (null == $date) {

色々

}

こちらもわかりません。


どちらか一つだけで構いません。どなたかよろしくお願いします。
**上記スクリプトはいずれもZendFramework内の表現です。

回答の条件
  • 1人2回まで
  • 登録:2007/04/16 05:45:40
  • 終了:2007/04/16 08:20:39

ベストアンサー

id:KirakiraHikaru No.2

KirakiraHikaru回答回数354ベストアンサー獲得回数682007/04/16 06:37:37

ポイント35pt

1)

?を使った文法は三項演算子です。

http://jp.php.net/manual/ja/language.operators.comparison.php#la...

(expr1) ? (expr2) : (expr3)  という式は、式1 が TRUE の場合に 式2 を、 式1 が FALSE の場合に 式3 を値とします。

ですので、

tagが配列であれば、そのまま取得しtags変数に入れて、

tagが配列でなければ、tagを配列にして(要素は一つ)tags変数に入れる。

という処理です。

要するに、URIで渡された値が複数であっても単数であっても配列として取得したいから、このような処理にしているのだと思います。


2)

こちらは、そのままですが、date変数が空なら色々するという処理です。

ちょっと検索してみて見つかったものですが、下記のリスト6で同じことをしています。

詳しくはわかりませんが、投稿日の有無によって、ある場合はその投稿日に対応したページの表示、ない場合はページ一覧を表示するという処理の切り分けで使用しているのではないでしょうか?

http://www-06.ibm.com/jp/developerworks/special/dlife/library/it...

id:tokyosmash

ずばりそのページでZendFrameworkを勉強していたんです。なかなかドキュメントが少なくて困ってます。


ところでなぜ

if ($date == null)

ではないのでしょうか。こちらの方がピンときますよね。あえて逆に書いてあるので何か特別な意味があるのかな?と思って質問させてもらいました。


みなさん回答ありがとうございました。

2007/04/16 08:19:13

その他の回答(1件)

id:imo758 No.1

imo758回答回数121ベストアンサー獲得回数192007/04/16 06:32:14

ポイント35pt

A ? B : C

A ならば B を、A でなければ C を返します。

1)

$tags = (is_array($_GET['tag'])) ? $_GET['tag'] : array($_GET['tag']);

$_GET['tag']の指し示す先が配列であれば$_GET['tag']の指し示す配列を

$_GET['tag']の指し示す先が配列でなければ$_GET['tag']そのものを

$tagsに代入しなさい


nullとは空っぽという意味です。

2)

if (null == $date) {

色々

}

$dateが空っぽなら色々しなさい

id:tokyosmash

ありがとうございます。見たことの無い形だったので助かります。

2007/04/16 08:17:05
id:KirakiraHikaru No.2

KirakiraHikaru回答回数354ベストアンサー獲得回数682007/04/16 06:37:37ここでベストアンサー

ポイント35pt

1)

?を使った文法は三項演算子です。

http://jp.php.net/manual/ja/language.operators.comparison.php#la...

(expr1) ? (expr2) : (expr3)  という式は、式1 が TRUE の場合に 式2 を、 式1 が FALSE の場合に 式3 を値とします。

ですので、

tagが配列であれば、そのまま取得しtags変数に入れて、

tagが配列でなければ、tagを配列にして(要素は一つ)tags変数に入れる。

という処理です。

要するに、URIで渡された値が複数であっても単数であっても配列として取得したいから、このような処理にしているのだと思います。


2)

こちらは、そのままですが、date変数が空なら色々するという処理です。

ちょっと検索してみて見つかったものですが、下記のリスト6で同じことをしています。

詳しくはわかりませんが、投稿日の有無によって、ある場合はその投稿日に対応したページの表示、ない場合はページ一覧を表示するという処理の切り分けで使用しているのではないでしょうか?

http://www-06.ibm.com/jp/developerworks/special/dlife/library/it...

id:tokyosmash

ずばりそのページでZendFrameworkを勉強していたんです。なかなかドキュメントが少なくて困ってます。


ところでなぜ

if ($date == null)

ではないのでしょうか。こちらの方がピンときますよね。あえて逆に書いてあるので何か特別な意味があるのかな?と思って質問させてもらいました。


みなさん回答ありがとうございました。

2007/04/16 08:19:13
  • id:KirakiraHikaru
    >ところでなぜif ($date == null)ではないのでしょうか。
    意味的にはどちらでも同じなので、どちらの記述も正しいのですが、
    普通なら仰るとおりif ($date == null)のほうがしっくりきますね。
    ただ、リンク先のページの部分では、if(変数の比較内容 == 変数)として統一されていますね。
    このような内々での規約があるのではないでしょうか?
  • id:tokyosmash
    なるほど。もしかするとZendFrameworkのコーディング規約があるのかもしれませんね。
    早朝から丁寧に調べていただいてありがとうございました。
    お陰様で気分よく?仕事に取り掛かれます。
    またよろしくお願いします。
  • id:JULY
    if (null == $date) といった書き方は、おそらく、比較と代入を間違えた時のための安全策だと思います。

    if ($date == null) のつもりで if ($date = null) としてしまった場合、$date が空になってしまい、結果、if (null) となるので、永遠にこの if 文には引っかからないことになります。

    ところが if (null == $date) と書くつもりで、if (null = $date) と書いた場合は、null という定数値に代入する文になるため、文法的に誤りになります。前述の場合、文法的には OK で、動作が意図した通りにならないのに対し、後者では文法的に NG なので、間違って書いたことに気が付きやすい、ということになります。

    ただ、個人的にはやっぱり if ($date == null) の方が好きですが(^^;
  • id:tokyosmash
    確かに!
    if ($date = null)
    これよくやっちゃいます・・。


    そういう事まで考えてらっしゃるかもしれませんね。でもやっぱり 変数==定数 の方がしっくりきますが。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません