WordPressを始める方に知ってほしいPHPの基礎
Webデザイン・DTPデザイン
-
- 公開日
-
- 最終更新日
東秀亮
PHPの基本的なルール
PHPタグ
『<?php』 で始まって 『?>』で終了する形です。このタグは、HTMLの途中に記述することもできます。(ただし、拡張子が.htmlではなく.phpの場合)
// 例1
<?php echo 'エンプロス'; ?>
// 例2(HTMLの文章中に入れた例)
<html>
<body>
<?php echo 'エンプロス'; ?>
</body>
</html>
PHPで終わる場合は、終了タグ『?>』を省略することもできます。PHPだけで記述することが多いWordPressのfunctions.phpでは、最後の終了タグ『?>』を省略することを推奨されています。
// OK例3(functions.php)
<?php
add_theme_supports( 'post-thumbnails' );
ファイルの最後の終了タグ「?>」を省略した方がいい理由
// OK例4(functions.php)
<?php
add_theme_supports( 'post-thumbnails' );
?>
// NG例4(functions.php)
<?php
add_theme_supports( 'post-thumbnails' );
?>
一見同じように見える「OK例4」と「NG例4」の違いは、実は終了タグ「?>」の後の改行の数の違いになります。ファイルの最後を2つ以上改行してしまうと改行の部分に半角スペースが入ってしまいます。
「OK例4」でもいいですが、意図せずに2つ以上の改行をしてしまう場合もあります。そういった場合でも半角スペースができてしまいます。トラブルを防ぐため、ファイルの最後には終了タグ「?>」をつけないようにしましょう。
文字列を表す「’」シングルクォーテーションと「”」ダブルクォーテーション
文字列は命令文や関数、数字と区別するために、 「’(シングルクォーテーション)」や「”(ダブルクォーテーション)」で囲みます。
<?php echo 'エンプロス'; ?>
// 「エンプロス」と出力
<?php echo echo; ?>
// エラー
<?php echo 'echo'; ?>
// 「echo」と出力
echoという文字を出力したい場合は、出力の命令文echoと区別するために「’(シングルクォーテーション)」や「”(ダブルクォーテーション)」で囲む必要があります。
// 正解
<?php
echo get_theme_file_uri() . '/images/logo.svg';
?>
// 「https://xxxx.xxx/wp-content/themes/xxxx/images/logo.svg」と出力
// 不正解
<?php
echo 'get_theme_file_uri()' . '/images/logo.svg';
?>
// 「get_theme_file_uri()/images/logo.svg」と出力
get_theme_file_uri()は、テーマファイルまでのURLを出力する関数なので、「’(シングルクォーテーション)」を囲んではいけません。 /assets/images/logo.svgは文字列なので、「’(シングルクォーテーション)」を囲みます。
「’」(シングルクォーテーション)と「”」(ダブルクォーテーション)の使い分け
「’」(シングルクォーテーション)と「”」(ダブルクォーテーション)どちらで囲っても文字列として認識しますが、処理スピードの速い「’」(シングルクォーテーション)を使うことを推奨します。
「”」(ダブルクォーテーション)で囲む必要がないかといえば、そうではなく使うシーンも存在します。
/* OK例 */
<?php "'エンプロス'は職業訓練校です。"; ?>
// 「'エンプロス'は職業訓練校です。」と出力
<?php '"エンプロス"は職業訓練校です。'; ?>
// 「"エンプロス"は職業訓練校です。」と出力
/* NG例 */
<?php ''エンプロス'は職業訓練校です。'; ?>
// エラー
<?php ""エンプロス"は職業訓練校です。"; ?>
// エラー
「’」を文字列として出力したいときには、「”」で囲む必要があります。逆に「”」を文字列として出力したいときは、「’」で囲むしかありません。
身近なところでいえば、PHPでGoogleタグマネージャーなどのコードを出力する際に、「”」で囲むシーンがあります。
連結する「.」(ドット)
<?php echo 'エンプロス' . 'は職業訓練校です。'; ?>
// エンプロスは職業訓練校です。
「.」(ドット)を使うことで、前後を連結することができます。ただ、例で挙げた内容だと、下記のように記述できてしまうため必要性を感じられません。
<?php echo 'エンプロスは職業訓練校です。'; ?>
// エンプロスは職業訓練校です。
まったく同じ結果になりました。文字列と文字列の連結では、あまり使用する意味がありません。では、どういった時に連結するのが望ましいのかいくつか例をあげてみます。
<?php
$school = 'エンプロス';
echo $school . 'は職業訓練校です。';
?>
// 「エンプロスは職業訓練校です。」と出力
// 変数と文字列の連結
<?php
echo get_theme_file_uri() . '/images/logo.svg';
?>
// 「https://xxxx.xxx/wp-content/themes/xxxx/images/logo.svg」と出力
// 関数と文字列の連結
このように、変数と文字列の連結や関数と文字列の連結のように、違う種類のものと連結したい時に使用することが効果的です。
変数
変数という概念は、PHPのみではなくJavaScriptやCSSなど他のプログラムでも使われます。変数はよく名前をつけた箱に例えられます。
PHPの変数は$から始まります。変数名は、半角英数字と_(アンダースコア)で任意の名前をつけることができます。名前を任意でつけられるからといって、適当につけてしまうと後でこの変数の役割があったか分からなくなるので、命名する際は注意が必要です。
変数名の付け方
$変数名
半角英数字と_(アンダースコア)で任意の名前をつけることができます。
変数名のOKパターン
変数名 | 使用文字 |
---|---|
$school | 半角英字 |
$school_name | 半角英字 +(_)アンダースコア |
$school01 | 半角英字 + 数字 |
$school_01 | 半角英字 + (_)アンダースコア + 数字 |
変数名のNGパターン
変数名 | 禁止文字 |
---|---|
$school-name | (-)ハイフン |
$1_school | 文頭数字 |
特に(-)ハイフンを変数名に入れてエラーというパターンが、多いので気をつけましょう。PHPでは関数名でも(-)ハイフンを使うことがありませんので、併せて覚えておくとよいでしょう。
変数の使い方
変数を利用するには、空の場合でも一度値を代入しなければなりません。その代入を「=」で表します。数学的には「=」は答えにあたる部分ですが、答えではなく代入と考えてください。
ここでは登場しませんが、イコールを表す記述は「==」になります。
<?php
// NGパターン
echo 'エンプロスは' . $place . '職業訓練校です。';
// $placeの名前の変数がないため、エラー
// OKパターン
$place = '';
echo 'エンプロスは' . $place . '職業訓練校です。';
// 「エンプロスは職業訓練校です。」と出力
// OKパターン
$place = '姫路の';
echo 'エンプロスは' . $place . '職業訓練校です。';
// 「エンプロスは姫路の職業訓練校です。」と出力
?>
変数の再代入
PHPの変数は再代入することができます。再代入とは値の上書きだと考えてください。
<?php
$place = '姫路の';
echo 'エンプロスは' . $place . '職業訓練校です。';
// 「エンプロスは姫路の職業訓練校です。」と出力
$place = '兵庫の'; // 「姫路の」から「兵庫の」に上書きされます
echo 'エンプロスは' . $place . '職業訓練校です。';
// 「エンプロスは兵庫の職業訓練校です。」と出力
?>
上記のコードの例では、$placeは途中まで「姫路の」という値が入っていましたが、途中から$placeに「兵庫の」という値に上書きされています。上書きされるまでの命令は「姫路の」で出力されています。
配列
配列をつかうと複数の値を変数に入れることができます。配列には[ ](角カッコ)もしくはarray()を使います。[ ](角カッコ)とarray()のどちらの記述でも同じ結果になりますが、[ ](角カッコ)の方が新しい記法なので、PHP5.4より古いバージョンのサーバーを使わないのであれば、新しい記法で記述することを推奨します。
WordPressの書籍やネットの情報ではまだまだ、array()を使った記法もあるので、[ ](角カッコ)と同じ結果を得られることを知っておくことは重要です。
<?php
// PHP5.4以降のバージョンで使用可能
$weather = [ '晴れ', '曇り', '雨' ];
// 古い記述方法
$weather = array( '晴れ', '曇り', '雨' );
?>
以下、[ ](角カッコ)の記法で説明いたします。
配列には、複数の値が入っているので、1つしか値が入っていない時とは違う記述方法で指定が必要です。また、配列の値には、それぞれ入った順番に数字が割り振られています。$weatherを例にどんな数字が割り当てられているかみていきます。
- 晴れ → 0
- 曇り → 1
- 雨 → 2
プログラミングでは、数字が0から数えるのが一般的なので、1番目に入った値には0、2番目に入った値には1、3番目に入った値には2となります。
$weather[0] の[ ](角カッコ)に割り振られた数字をいれると指定の値になります。今回の場合は[0]なので、値は「晴れ」になります。
<?php
$weather = [ '晴れ', '曇り', '雨' ];
echo $weather[0];
// 「晴れ」と出力
echo $weather[1];
// 「曇り」と出力
echo $weather[2];
// 「雨」と出力
echo $weather;
// エラー
?>
echo $weather;で一見、すべての値が表示できそうですが、残念ながらできません。すべての値を表示するにはforeach文を使う必要がありますが、ここでは配列の基本的な説明をしたいので割愛します。
配列の再代入
配列も変数と同じように再代入することができます。
<?php
$weather = [ '晴れ', '曇り', '雨' ];
$weather[2] = 'あめ'; // 「雨」が「あめ」に上書き
// 配列の中身は$weather = [ '晴れ', '曇り', 'あめ' ];
$weather[] = 'はれ'; // $weather[0]に「はれ」が再代入
$weather[] = 'くもり'; // $weather[1]に「くもり」が再代入
// 配列の中身は$weather = [ 'はれ', 'くもり', 'あめ' ];
?>
直接[ ](角カッコ)の中に数字を指定すると、その順番の値に再代入ができます。[ ] (角カッコ)の中が空の場合は、前から順番に値が再代入されます。
連想配列
連想配列は配列の一種です。通常の配列では値を出力するのに、順番が必要でその順番と値が関連性がないので困ることもあります。連想配列は、順番といった数字での管理ではなく文字でデータを管理します。
この文字のことを「キー」と呼びます。「キー」で「値」を呼び出します。
<?php
$school = [
'name' => 'エンプロス',
'city' => '姫路市',
'type' => '職業訓練校',
];
echo $school['name'] . 'は' . $school['city'] . 'の' . $school['type'] . 'です。';
?>
// 出力結果
エンプロスは姫路市の職業訓練校です。
上のコードの「name」はキーにあたります。「name」に関連づけられた値が「エンプロス」です。
連想配列にすることで、配列を呼び出す時に何を呼び出しているか直感的にわかりやすくなりました。
配列の中身を取得するforeach文
配列や連想配列に関連が深いのがforeach文です。実際foreach文を使う機会が多いのでセットで覚えておくと良いでしょう。foreach文を使うことで、配列の中身を取得および出力することができます。
<?php
$weather = [ '晴れ', '曇り', '雨' ];
foreach( $weather as $value ) {
echo $value; // 配列の値が順番に実行
}
?>
// 出力結果
晴れ
曇り
雨
また連想配列の場合は連想配列の値だけでなくキーも一緒に取得および出力することができます。
<?php
$school = [
'name' => 'エンプロス',
'city' => '姫路市',
'type' => '職業訓練校',
];
foreach( $school as $key => $value ) {
echo $key . 'は' . $value 'です。'; // 配列のキーと値が順番に実行
}
?>
// 出力結果
nameはエンプロスです。
cityは姫路市です。
typeは職業訓練校です
WordPressのテンプレートタグを使った例
カテゴリーに関する情報を配列として取得するget_the_category()を例にforeach文を使ってみたいと思います。
get_the_category()には、配列のキーと値が下記の表のような形で入っています。(ほんの一部です。)
キー | 値 |
name | カテゴリー名が入ります。 ex)お知らせ、コラム など |
slug | スラッグ名が入ります。 ex)news,columnなど |
description | カテゴリーの説明文が入ります。 |
つまり、仮に「お知らせ」と「コラム」がカテゴリーとして存在して、その中のカテゴリー名を出力させたい場合をコードで表すと
// get_the_category()の中身(一部)
<?php
$category = get_the_category();
// $categoryの中身のイメージ(一部)
// $category = [
// [
// 'name' => 'お知らせ',
// 'slug' => 'news',
// 'description' => 'お知らせの説明'
// ],
// [
// 'name' => 'コラム',
// 'slug' => 'column',
// 'description' => 'コラムの説明'
// ]
// ];
foreach( $category as $field ) {
echo $field->name;
}
?>
// 出力結果
お知らせ
コラム
LINEをつかって友達や家族にこの記事を教える
シェアボタン