質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1321閲覧

サンプルプログラムでよくわからない箇所

msx2

総合スコア174

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

3グッド

0クリップ

投稿2016/02/13 16:51

下記は本に掲載されていたサンプルプログラムの抜粋です

PHP

1//IDが指定されていない場合や、指定されたIDの記事が見つからない場合は一覧にリダイレクト 2$id and $data['article'] = Model_Article::find($id); 3if (!$data['article']) { 4 Response::redirect('articles'); 5}

引数で受け取った$idを使ってデータを取得する処理で、$idは初期値に0が指定されており、$idは1から始まるので$idの指定がなければデータは取得できずリダイレクト処理となります。

最初の$id and はあっても無くても関係なさそうですが、何の意味があるのでしょう?

yng13, cry_4_the_moon👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

基本的には最初に回答しているyng13さんの通りです。

補足として、
このソースの場合、idが入らなかった時(0)に$data['article']は定義されていないのでNotice: Undefined indexエラーが発生します。
それを解決させるには下記のようにissetやemptyを挟む必要があります。

if(!isset($data['article']) || !$data['article']) { Response::redirect('articles'); }

個人的にはソースの明瞭性に欠けていたり、判定の内容が異なると感じるので以下のように区切ったほうが良いと思います。
あくまでも個人的な意見です。

if(!empty($id)) Response::redirect('articles'); $data['article'] = Model_Article::find($id); if(!$data['article']) Response::redirect('articles');

投稿2016/02/13 20:24

編集2016/02/13 20:30
fagai

総合スコア2158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

msx2

2016/02/14 15:27 編集

$data['article']が定義されていないというのが不思議でPHPマニュアルを見ていたら「短絡評価」という言葉を始めて知りました。 まさか$idが入らなかった時点で右側の$data['article']=Model_Article::find($id)は評価されないとは…。それで補足のissetやemptyが必要になるってことなんですね。 また一つPHPの理解が進みました、ありがとうございます。
guest

0

このコードだけで全貌がわかりませんが、コード内のコメントにあるとおり、

php

1//IDが指定されていない場合や、指定されたIDの記事が見つからない場合は一覧にリダイレクト

idが指定されていない場合を評価しているのが $id andの記述です。

$idは初期値に0が指定されており

ということなので、$idが初期値のままで0の場合、$id andの条件?は真(true)になりません。
つまり、$idが指定されているかどうかを検査する、という意味を持っています。

$idが指定されているかどうか、と指定された$idのModel_Articleが存在するかどうか、は別の問題ですよね?
例えば、ユーザーが$idに相当する数字を入力しなければいけない画面で、

「IDを指定してください」というエラーを表示することと、「指定されたIDのArticleは存在しません」という表示では意味が違いますよね?

投稿2016/02/13 17:46

編集2016/02/13 17:49
yng13

総合スコア215

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

msx2

2016/02/14 01:26

簡易的なプログラムだったので深く考えていませんでしたが、ご指摘の通り$idが指定されていないのと$idのArticleが見つからないのは意味が違いますね。 そういうところも考えながらプログラムを作っていかないといけないのですね。 ご回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問