クモのようにコツコツと

Webデザイナー イイダリョウのブログ。略称「クモコツ」

PHPの基本を理解するためにJSと比較する

サーバサイドの中でのWordPressの位置付け」で書いたようにPHP*1はサーバサイドのプログラミング言語です。現在、CMSの定番となっているWordPressPHPで作られています。

WordPressのコードは「PHP書式」とWordPress独自の「テンプレートタグ」で構成されています。この二つが識別できるとWordPressのコードが読みやすくなり、テーマ作成やカスタマイズがしやすくなります。
まずはPHPの基本を理解するために、フロントエンドのプログラミング言語JSとの違いを見ていきましょう。

開始タグと終了タグ

WordPressのテーマフォルダにある.phpファイルの中を見てみるとHTMLっぽい書式が見受けられます。静的ページである.htmlファイルにPHPを記述しても、通常は動作しません。拡張子.html.phpに変えるとPHPが動作し、動的ページになります。*2

その際に下記の「開始タグ」「終了タグ」が静的HTMLと動的PHPの境界の目印になります。

<?php 動的処理 ?>

頭の<?phpが「開始タグ」、最後の?>が「終了タグ」です。その中にPHPの書式で処理を記述します。
例えばHTMLのh1タグの中身を動的に変更したい場合はこのように記述します。

<h1><?php 処理 ?></h1>

なんだか「HTMLの基本」で触れたコメントの開始タグ<!--、終了タグ-->とも似ていますね。
PHPの動作確認はサーバ上*3で行います。ブラウザにはPHP動作後のHTMLのみが表示されます。

なお、WordPressテーマにあるfunctions.phpなどのようにファイル全体がPHPのみで記述しているファイルの場合は、終了タグを省略します。(終了タグの後にスペースなどの記述があるとエラーの原因になるため)

<?php
    処理1
    処理2
    処理3
    処理4
(終了タグ不要)

コメント

ここからは以前の記事で触れたフロントエンドのプログラミング言語であるJSと比較していきます。
JSって何?という方はこちらをご覧ください。
※参考: 【JSの基本-前編】書ける前に読む!HTML、CSS、JSの書式-4

PHPのコメントは3種類。

<?php
//PHPの一行コメント

#これも一行コメント(非推奨)

/* 複数行のコメントです。
コメントですったら
コメントです。 */
?>

二つはJSのコメントと共通しますね。
残りの一行コメント#は今はあまり推奨されていないらしいので、PHPのコメントはJSとほぼほぼ同じと考えていいでしょう。

なお、注意すべきはPHPのコメントが効くのは開始タグ、終了タグの中だけということ。

<!--開始タグ、終了タグの外のコメントはHTML書式で-->

//これはダメです

/* これもダメです */

<?php
//開始タグ、終了タグの中はこれでOK!

/* これもOK! */
?>

開始タグ<?php、終了タグ?>の外のコメントにはシンタックスハイライトの色が付いていないのがわかると思います。 ここにはHTML書式のコメントを書きます。

変数

PHPの変数はこのような書式です。

<?php
$変数名 = 値;
?>

JSの変数との違いは、JSが頭にvar(またはletconst)を付けるのに対して、PHPは変数名の頭にドル $を付けます。変数名とドルの間は開きません。
値をイコール=で繋ぎ、行末にセミコロン;を付けるのはJSと同じです。

例:

<?php
//文字列
$name = "イイダリョウ";

//数値
$num = 2018;
?>

文字列はコーテーション" "でくくり、数値はコーテーション不要。後述する関数なども入れることができます。

文字列の出力echo

echoは文字列を出力する命令です。PHPではとてもよく使われます。echoは関数ではなく「言語構造」と言われるもので、すぐ後ろの文字列を出力します。関数のようなカッコは不要です。

<p><?php echo "日本語でおk"; ?></p>
<!-- 出力結果 日本語でおK -->

変数と文字列はピリオド.でつなぎます。(JSではプラス+で繋ぎます。混同しないよう注意)

<?php $lang = "日本語"; ?>
<p><?php echo $lang . "でおk"; ?></p>
<!-- 出力結果 日本語でおK -->

echoはHTMLタグも含めて出力ができるので、PHPの中にHTMLタグを埋め込むことができます。

<?php echo "<p>日本語でおk</p>";  ?>
<!-- 出力結果 <p>日本語でおk</p> -->

なお、文字出力の言語構造は他にprintというものもあります。書式はほとんど同じです。

関数

組み込み関数

PHPにもJSと同様あらかじめ定義された「組み込み関数」があります。関数名の後にカッコ( )が付いて中に引数が入る形はJSと同じです。

<?php
$変数名 = 関数名(引数);
?>

例:

<?php
$today = date(Y/m/d); 
//結果 2018/01/08
?>

date()関数は現在の日付を取得する組み込み関数です。

ユーザー定義関数

ユーザー定義関数もJSと同じです。functionの後に関数名、引数、ブロック文です。

<?php
function 関数名(引数) {
    処理
}

//関数呼び出し
$変数名 = 関数名(引数); 
?>

例:

<?php
function shokai($name) {
    echo "私の名前は" . $name.  "です。";
}

//関数呼び出し
$profile = shokai("イイダ"); 
//実行結果 私の名前はイイダです。
?>

無名関数

無名関数もJSと同じ書式です。functionの後にすぐ引数です。

<?php
$変数名 = function (引数) {
    処理
}

//関数呼び出し
$変数名(引数);
?>

例:

<?php
$profile = function ($name) {
    echo "私の名前は" . $name.  "です。";
}

$profile("イイダ")
//実行結果 私の名前はイイダです。
?>

配列

配列(添字)

PHPの配列は下記のような書式です。

<?php
//配列
$変数名 = array( 値, 値, 値 );
?>

JSの配列との違いは、あらかじめarrayという関数が定義されていることです。引数の中に値を書きます。
例:

<?php
//配列
$name = array( "イイダリョウ", "ヤマダタロウ", "カワタジロウ" );

echo $name[1] ;
//実行結果 ヤマダタロウ
?>

配列のカウントはJSと同じく0か始まるので[1]は2番目、という意味です。

連想配列

連想配列は下記のように書きます。

<?php
//連想配列
$変数名 = array( 
    キー => 値,
    キー => 値,
    キー =>);
?>

JSの連想配列はキーと値をコロン:で繋ぎましたが、PHPはダブルアロー演算子=>でつなぎます。

例:

<?php
//連想配列
$spec = array( 
    "名前" => "イイダリョウ",
    "サイト名" => "クモのようにコツコツと",
    "職業" => "Webデザイナー"
);

echo $spec["職業"] ;
//実行結果 Webデザイナー
?>

制御構造

ここからはPHPの制御構造を見ていきましょう。WordPressではif文やWhile文がよく見られます。JSの制御構造はこちら。
※参考: 【JSの基本-後編】書ける前に読む!HTML、CSS、JSの書式-5

if文(分岐)

PHPのif文はJSによく似ています。違うところはelse ifがあらかじめ用意されたelseifの一語で済むところです。

<?php
if (条件式1) {
    処理1
} elseif (条件式2) {
    処理2
} elseif (条件式 3) {
    処理3
} else {
    処理4
}
?>

PHPにはもう一つ、波カッコ{ }をつかわない書き方もあります。

<?php
if (条件式1):
    処理1
elseif (条件式2):
    処理2
elseif (条件式 3):
    処理3
else :
    処理4
endif;
?>

波カッコの{がコロン:になり、閉じカッコ}はなくなり、if文の一番最後にendif;がつきます。

例:

<?php
$age = 37

if ($age >= 25):
    echo "あなたはアラサーです";
elseif ($age >= 35):
    echo "あなたはアラフォーです";
elseif ($age >= 45):
    echo "あなたはアラフィフです";
elseif ($age >= 55):
    echo "あなたは年配です";
else:
    echo "あなたは若者です";
endif;

//結果 あなたはアラフォーです
?>

PHPの分岐処理にはJSと同じくswitch文などもあります。

while文(反復)

while文もJSとよく似ています。

<?php
$i=初期化式

while (条件式)  {
    処理
    増減式
}
?>

if文と同様に波カッコを書かない書式があります。

<?php
$i=初期化式

while (条件式):
    処理
    増減式
endwhile;
?>

一番最後はendwhileになります。

例:

<?php
//配列
$soup = array("醤油", "味噌", "");

//初期化式
$i=0;

//while文
while ($i < 3) :
    echo $soup[$i] . "ラーメンいかがっすかー?"; 
    $i++
endwhile;

//結果1 醤油ラーメンいかがっすかー?
//結果2 味噌ラーメンいかがっすかー?
//結果3 塩ラーメンいかがっすかー?
?>

PHPの反復処理にはJSと同じくfor文などもあります。

最後に

以上がWordPressでよく見られるPHPの基本書式です。JSと比較すると細かい書き方は違うけど全体的には似ていますよね!
PHPの基本が理解できるとWordPressのコードが読みやすくなり、その中にあるWordPress独自の「テンプレートタグ」が見つけやすくなります。
それでは次回WordPressのよく使われる「テンプレートタグ」について見ていきまSHOW!

※次回はこちら:ざっくりWordPress:PHP書式とテンプレートタグの識別-前編


※参考:サーバサイドの基本まとめました!
【WordPress、PHP、SQL文】Webデザイナーでもわかるサーバサイドの基本まとめ!(6記事) - クモのようにコツコツと idr-zz.hatenablog.com

*1:PHPは何の略?PHP: Hypertext Preprocessorの略。ではPHP: Hypertext PreprocessoのPHPは何の略?PHP: Hypertext Preprocessorの略。ではry……元々はPersonal Home Pageだったそうな。海外でもWebサイトのことをホームページと言ってたようだね。

*2:JSと同じくスクリプト言語なのでコンパイラは不要です。

*3:ローカルで確認したい場合はローカルサーバ環境を構築します。