自分のWordPressで学ぶPHP講座(AIの変更を判定する)

区分2 読むための最低限★★★

No.03 変数・配列・関数

PHPのコードに必ず出てくる、変数・配列・関数・定数の4つを読めるようにする単元です。書けなくていいので、見た時に「あ、入れ物だ」「あ、一覧だ」と分かるのが目標で、この回はしっかりやります。
目次
  1. 第0章 前提知識
  2. 第1章 変数と文字
  3. 第2章 配列
  4. 第3章 関数と定数
  5. 確認問題

第0章 前提知識

① 変数 :値を入れておく名前付きの箱

変数は、文字や数字を一時的に入れておく箱です。 PHPでは、名前の頭に $ を付けます。$name や $c のように書きます。

② 配列 :箱がいくつも並んだ一覧

配列は、値を複数まとめて入れておく一覧です。 住所録のように、「項目の名前」と「その中身」の組が並んでいる形が、WordPressでは特によく出てきます。

③ 関数 :名前を付けた手順書

関数は、「この手順をやってください」と名前で呼び出せる、まとまった処理です。 料理で言う「レシピ」で、材料(引数)を渡すと、料理(結果)が返ってきます。

④ 似た言葉との違い

記号・見た目 何か
変数 $名前 中身が変わる箱
定数 ABSPATH($ が付かない) 一度決めたら変わらない値
配列 array( … ) または [ … ] 値の一覧
関数 名前( … ) 手順のまとまり

第1章 変数と文字

① 箱に入れる:$ と = 必ず覚える

$additions  = "\n# ゴミURL対策\n";
$additions .= "Disallow: /*?feed=\n";
return $output . $additions;

これは子テーマの functions.php にある、検索エンジンへの案内文(robots.txt)に行を足す処理の一部です。

1行目の = は、「左の箱に、右の値を入れる」という意味です。数学の「等しい」ではありません。 2行目の .= は、「箱の中身の後ろに、右の値をつなげる」です。 3行目の .(ピリオド)は、文字をつなぐ記号で、$output と $additions をつなげた結果を返しています。return の意味は、第3章で見ます。

行の最後の ;(セミコロン)は、1つの文の終わりです。AIの差分で ; が抜けていると、サイト全体が動かなくなることがあります。

② 文字は引用符で囲む:' と " 必ず覚える

文字は、'…' か "…" で囲みます。違いは1つだけです。

上の例の "\n# ゴミURL対策\n" は、改行を含めたいのでダブルを使っています。 迷ったら、「改行や変数を使うならダブル、そうでなければシングル」と読んでおけば足ります。

③ 数字・真偽・空 さらっと

文字のほかに、次のような値があります。

'8'(引用符あり)は文字で、8 は数字です。見た目は似ていても、PHPは別の物として扱います。

コメント(動きに関係しないメモ)の書き方は3つあります。

// 1行のコメント
# これも1行のコメント
/* 何行にもわたる
   コメント */

コメントの中に「危ないから消す」のような文があっても、実際の動きには関係しません。差分を見る時は、コメントの行より、コメントでない行の方を見ます。

第2章 配列

① 並べる:array( … ) と [ … ] 必ず覚える

配列には、2つの書き方があり、意味は同じです。

array( '駅から', '徒歩1分' )
[ '駅から', '徒歩1分' ]

array( … ) が古くからある書き方で、[ … ] は短く書ける新しい書き方です。 AIはどちらも出します。どちらが出ても、同じ物として読みます。

② 「名前 => 中身」の組と、取り出し方 必ず覚える

function lk_look_config() {
  return array(
    'body_class' => 'look-timee',
    'hero_title' => array( '踊りたい時に、', 'サッと踊れる。' ),
    'ctas'       => array(
      array( 'label' => '料金を見る', 'url' => 'price', 'class' => 'lk-btn lk-btn-sub' ),
      array( 'label' => 'アクセス', 'url' => 'access', 'class' => 'lk-btn lk-btn-sub' ),
    ),
    'note'       => array( 'label' => '空き状況を見る', 'url' => 'schedule' ),
  );
}

これは子テーマの functions.php にある、サイトの文言をまとめた設定の一部です(LINEボタンなどは省いています)。

'body_class' => 'look-timee' の => は、「名前(キー)と、その中身(値)」を結びつける矢印です。 左がキーで、右が値です。

配列の中に配列を入れることもできます。'hero_title' の値は、文字が2つ並んだ配列です。 'ctas' の値は、ボタン1つ分の配列を2つ並べた配列です。

取り出す時は、変数に [ ] でキーを付けます。

$c = lk_look_config();
$c['body_class']        // 'look-timee'
$c['hero_title'][0]     // '踊りたい時に、'(番号は0から数える)
$c['note']['label']     // '空き状況を見る'

番号が付いていない配列は、先頭から 0・1・2 と数えます。「1番目」が 0 になる点だけ、覚えておいてください。

第3章 関数と定数

① 関数を作る:function と return 必ず覚える

function my_slide_max() {
    return 8;
}

これは子テーマの functions.php の、一番短い関数です。

つまり、呼ばれたら 8 を返すだけの関数です。 この関数が、どのタイミングで呼ばれるのかは、次の1行が決めています。

add_filter( 'lightning_top_slide_count_max', 'my_slide_max' );

この add_filter は、「Lightning がスライドの最大枚数を決める時に、my_slide_max を呼んでください」という登録です。詳しくはNo.05(後で出ます)で扱います。

② 関数を呼ぶ:名前に ( ) を付ける 必ず覚える

関数を使う時は、名前の後ろに ( ) を付けて、材料を中に書きます。

mb_strlen( $t1 )
esc_html( $t1 )
get_stylesheet_directory_uri()

3つとも見た目は同じですが、出どころが違います。

名前の頭が lk_ や my_ のように独自の印が付いていれば、自作です。 自作か、WordPressの物か分からない関数は、AIに「これはどこで定義されていますか」と聞けば確かめられます。

関数の名前には、もう1つ注意点があります。 同じ名前の関数を2回作ると、サイトが止まります。AIが似た名前の関数を足してきた時は、既にある関数と名前が重ならないかを見ます。

③ 名前のない関数:function() { … }

add_action( 'wp_enqueue_scripts', function() {
    // …処理…
} );

名前を付けずに、その場で関数を渡す書き方もあります。 「その場限りで使う手順」を、1か所に書けます。 名前がなくても、中の読み方は、普通の関数と同じです。

④ 定数:define さらっと

define( 'LOOK_FOR_ALL', true );

define は、定数(一度決めたら変わらない値)を作ります。 名前の頭に $ が付かず、大文字で書くのが普通です。

作った後は、LOOK_FOR_ALL と名前だけで使います。 実際の functions.php では、この行の前に「もしまだ作られていなければ」という条件が付いていますが、それは次の単元(No.04)で見ます。

○ 読み方のコツ:関数の中身を読む前に、1行目の function 名前( と、return の所だけ読む。何を受け取って何を返すかが分かれば、全体の意味は大体つかめます
○ よくある勘違い:「= は等しい、という意味」→ ×。= は代入(箱に入れる)です。「等しいか」を調べる記号は、No.04で見ます
○ 関係する単元:No.04(条件)/No.05(フック)

$ は箱、=> は名前と中身の組、function は手順書、return は結果を返す合図、define は変わらない値。= は「入れる」であって「等しい」ではない。

確認問題

問1 AIの差分に「$count = 5;」という行が足されていました。これは何をしていますか?

問2 $c['hero_title'][0] が取り出すのは、次の配列のどの値ですか? 'hero_title' => array( '踊りたい時に、', 'サッと踊れる。' )

問3 子テーマの functions.php の関数「function my_slide_max() { return 8; }」を読みました。正しい説明は?

問4 AIが「定数を作りました」と言い、define( 'LOOK_FOR_ALL', true ); を足しました。この定数をあとで使う時の書き方は?

出典:PHP公式マニュアル「変数の基礎」(https://www.php.net/manual/ja/language.variables.basics.php)/「文字列」(https://www.php.net/manual/ja/language.types.string.php)/「配列」(https://www.php.net/manual/ja/language.types.array.php)/「ユーザー定義関数」(https://www.php.net/manual/ja/functions.user-defined.php)/「定数」(https://www.php.net/manual/ja/language.constants.php)/あなたの子テーマ内 functions.php。