【PHP】構文早見表
よく使うPHPの構文を紹介します。実際の業務ではこれらの構文を組み合わせてPHPをコーディングしていきます。
コードを書き進めていくとどんどん複雑になっていきますが、基本となるパターンはわずかです。
- 変数に代入して、表示
- if文で条件分岐
- foreach文でループを回す
変数に代入して、表示
まず、基本として変数($var)に値を代入して、'Hello World!'の文字列を表示させています。ここで使われている「=」は代入演算子と呼ばれるもので、数学で使われる等号とは役割が異なるものなので注意してください。$varに'Hello World!'の文字列を代入することを実行しています。そのあとに$varをechoすると下記のようにHello World!と表示されます。
次に、'Hello World!'の代わりにthe_title()が右辺に来ていますが、これは「the_title()関数を呼び出し、実行して、その戻り値を$varに代入する」という動きをしています。the_title()関数の戻り値は呼び出した場所の投稿のタイトルなので、下記のように、記事タイトルが$varに格納されていることがわかります。
if文で条件分岐
if文の分岐の構造
上記の例では3回、それぞれ少し違う形でif文の条件分岐のコードを書いています。4-8行目のif文では「:」や「;」を使ってif文の構造を書いていますが、10行目以降のif文では「{}」を使ってif文の構造を書いています。これらに機能上の差はないので好きな方を使っていいのですが、BMBでは主に「{}」を使ってif文の構造を書くことが多いです。
またif文はelseやelseifを使って書くことが多いです。4-8行目のif文を日本語に読み替えると「$flgがtrueのとき、①の文を表示し、そうでないとき、②の文を表示する」と解読できます。elseを使わない10-12行目のif文は「$flgがtrueのとき、③の文を表示する」となり、条件に一致しないときは何もしません。16-20行目のif文は「$flgがtrueのとき、④の文を表示し、$flgがtrueでないとき、⑤の文を表示する」と解読でき、それらの条件以外の時は何もしないと読み解けます。
if文の条件について
if文の条件を記載する箇所はif直後の()の中です。この()全体の値がtrue、もしくは空文字でないとき条件に合致したとみなされ、直後の分岐内のコードに進みます。上記の例だと3-7行目のif文と、9-13行目のif文を見るとわかりやすいかと思います。
また条件の評価が()全体の最終的な値によって決まる、という点も重要です。それによってifの()ではしばしば論理演算によって、最終的な値がtrueかfalseかに帰着するようコーディングされていることが多いです。例えば上記の例だと17-19行目のif文を見ると、()内が「$str == 'abc'」となっています。これは左辺の値は'abc'で右辺の値も'abc'ですが、全体の値はtrueです。これは真ん中の「==」が等しいかどうかを評価する比較演算子なので、評価結果としてのtrueがここの()全体の値となります(代入演算子(=)とは全く別物です)。
また、論理演算は()を使って入れ子にすることも出来ます。23-25行目と27-31行目のif文では「==」でtrueかfalseに評価し終わったものを、「||」や「&&」でさらに評価しています。「||」は日本語的には「または」と言い換えることができ、左辺か右辺のどちらかがtrueであれば、全体でtrueの評価になります。「&&」は日本語的には「かつ」と言い換えることができ、左辺と右辺のどちらもtrueのときだけ、全体でtrueの評価になります。ほかにも直後の評価を反転させる「!」という論理演算もあり、これは「~でない」と日本語で読み替えることができます。
紛らわしいif文の条件の例
上記の例のように、ifの条件内で=を使うことも出来ます。これは比較演算子ではなく、代入演算子なので、右辺と左辺の等しさを評価しているわけではありません。上記の例の動きとしては、まず$strに値が代入され、その後$strの値が最終的な条件内の値としてifの分岐の判断に使われます。ifの分岐は()内の文字列が空文字でないときも条件に合致したとみなされるので、3-7行目のif文では直後の分岐に進み、空文字を代入している9-13行目のif文の分岐ではelseの方の分岐に進んでいます。
foreach文でループを回す
上記の例の4-6行目のforeach文と8-10行目のforeach文は書き方が微妙に異なりますが、やっていることは全く同じです。if文同様{}を用いた書き方と:やendforeachといったキーワードを用いた書き方があります。
ループ用の文法はwhileなど、ほかにもありますが、foreach文の特徴は、ある配列の長さ分(部屋の数分)だけループするということです。WordPressで一番よく使うループ文です。foreachのすぐ後ろの()内には「$array as $str」と書かれていますが、これは「$arrayの配列に対して、各要素に対しそれぞれ以下の処理を実行します。各要素の値は$strの変数に格納して処理します」と読み替えることができます。foreach文は配列の長さ分が終わったら勝手にループを抜けてくれるので、ほかのループの文法と比べて、抜けるための条件を考えなくていいので便利です。
投稿のループ
WordPressで最も頻繁にforeach文を使うのは、投稿を一記事ずつループさせたいときです。上記の例のように、この場合foreachさせる配列変数は、必ずget_posts()関数の戻り値として取得した配列です。この配列変数は$postsと名付けることが定められています。ループ内では$postという名前の変数で、各要素の値を格納します。また、記事投稿のループの独自のルールとして、ループ内の最初のタイミングで、setup_postdata()関数を$postを引数として呼び出す必要があります(上記例の15行目)。これをしないとthe_title()などのWP標準の関数がちゃんと動きません。また、$postsを使ったループが終了したら、wp_reset_postdata()関数を呼び出すのも必要です(上記例の29行目)。これをしないと、一つのページで$postsのループを複数実行する際に挙動がおかしくなります。
上記の例のような投稿のループは、ほぼ毎回このような形になるので、最初のうちはどこかからコピーしてそれをカスタマイズする形でコーディングすると効率がよいと思います。
株式会社ビーエムビー
〒114-0031 東京都北区十条仲原1-4-8 商店街会館311 TEL&FAX:03-5948-5996
東京都北区のWEBやDTP(印刷物)のデザイン制作会社です。ホームページ制作やLP(ランディングページ)の作成、ECサイト(楽天ストアなど)の構築などのWEBデザイン、チラシ・ポスター・名刺・パンフレット・看板などの印刷物デザインに対応しています。お客様の業務形態や用途に合わせたwordpressによるCMSサイトをフルスクラッチにて構築することが可能です。お気軽にお問い合わせください。