2024年03月28日

6.PHPのオブジェクトとループ処理

配列の中の「連想配列」と似ているが異なる「オブジェクト」があります。

WordPressはこの「オブジェクト」で作成されています。

ここではこの「オブジェクト」について解説していきます。

配列とオブジェクトの見分け方

オブジェクトの作成とデータの取得方法

WordPressの文書の読み込みの解説

 

配列とオブジェクトの見分け方

配列やオブジェクトを print_r() で表示すると何が使われているのかを判断できます。

種類 データ構造

添字配列

添字と値のペアで配列として登録されています。

Array()で表示されます。

Array ( 
[0] => リンゴ 
[1] => みかん 
[2] => パイナップル )

連想配列

キーと値のペアで配列として登録されています。

Array()で表示されます。

Array ( 
[apple] => リンゴ 
[orange] => ミカン
[pineapple] => パイナップル )

オブジェクト

キーと値のペアでオブジェクトとして登録されています。

オブジェクト名 Object ()で表示されます。

my_class Object (
[apple] => リンゴ 
[orenge] => みかん
[pineapple] => パイナップル )

■オブジェクトは オブジェクト名 Object が表示されます。

 

オブジェクトの作成とデータの取得方法

ここではオブジェクトの作り方と読込み方を解説します。

1.オブジェクトの作成

<?php 
	class my_class{
		public $apple = 'リンゴ';
		public $orenge = 'みかん';
		public $pineapple = 'パイナップル';
	}
	$my_object = new my_class;// オブジェクトのインスタンス化(実体化)
?>
<pre>
	<?php print_r($my_object);?>
</pre>

■3行目~5行目の[$apple]等はキーではなくプロパティと呼ばれ、これには下記のアクセス宣言が必要になります。

アクセス装飾子 説明
public 何処からでもアクセスが可能です。
protected そのクラス自身と親子関係にあるクラスのみアクセスが可能です。
private そのクラス自身のみがアクセス可能です。

※ここでは[public]を利用します。尚、他のアクセス権限の説明は省略します。

■7行目の[$my_object = new my_class;]は、オブジェクトの実体化で、これでプログラムから[$my_object]が利用できる様になります。

■下記が表示されます。

my_class Object
(
    [apple] => リンゴ
    [orenge] => みかん
    [pineapple] => パイナップル
)

 

2.オブジェクトからのデータの取り出し

オブジェクトからのデータ取り出しは下記の[演算子]を利用します。

事例 解説
配列名->'プロパティ名' ->は、アロー演算子と呼ばれています。

オブジェクトからプロパティ名を指定して、データを取り出します

1項で作成したオブジェクトから、データを読み込む方法は下記になります。

<?php 
    $data  = $my_object -> apple;
    echo  $data;
?>

■リンゴが表示されます。

 

3.foreachループでデータを取得する。

配列操作と同様にオブジェクトでも foreach が利用できます。

<?php
   foreach($my_object as $key => $val):   // 命令の終わりは(:コロン)です
      echo '[' . $key .']=' . $val . '<br>';
   endforeach;                            // 命令の終わりは(;セミコロン)です
?>

結果は下記になります。

[apple]=リンゴ
[orenge]=みかん
[pineapple]=パイナップル

 

4.Whileループでデータを取得する。

配列操作と同様にオブジェクトでも While が利用できます。

Whileは、オブジェクトが持つ内部ポインタを制御してループを回します。

内部ポインタ関数 説明
current() 引数で指定した配列の内部ポインタが指している値を返します。

データが無い場合はfalseが返ります。

key() 引数で指定した配列の内部ポインタが指しているキーを返します。

キーが無い場合はnullを返します。

next() 引数で指定した配列の内部ポインタを一つ進めて、値を返します。

これ以上ポインタが進められない場合はfalseが返ります。

上記の関数を使ったプログラムが下記になります。

<?php
	while(current($my_object)):
		$key = key($my_object);
	    $val = current($my_object);
		echo '[' . $key .']=' . $val . '<br>';
		next($my_object);  // 内部ポインタを進めます。※重要です
	endwhile;
?>

■6行目の[next($my_object);]を省略すると2行目の[current($my_object)]が常にtrueになり、無限ループになるので注意が必要です

■結果は下記になります。

[apple]=リンゴ
[orenge]=みかん
[pineapple]=パイナップル

 

WordPressの文書の読み込みの解説

WordPress文書データはオブジェクトで作成されており、読み込みは While を利用します。

但し、WordPressのグローバル変数を操作する為に current() と next() に相当する専用関数が用意されています。

WordPress関数 解説
have_posts() [$wp_query]の内部ポインタが指しているドキュメントがあるか否かをチェックする関数です。

あった場合は true、無い場合は false を返します。

the_post() whileループの中で使える関数で、[$wp_query]の内部ポインタが指しているデータを[$post]に取り込みます。

更に、[$wp_query]の内部ポインタを1つ更新します。

尚、WordPressが利用している主要なグローバル変数は下記になります。

グローバル変数 解説
$wp_query DBに問い合わせした結果の情報がセットされているオブジェクト

例えばカテゴリ表示の場合は、対象のカテゴリの文書が総て登録されています。

$post $wp_queryの中から選択された情報がセットされたオブジェクト

例えばカテゴリ表示の場合は、$wp_queryの中の先頭の文書が取り出されています。

■上記以外にWordPressが利用しているグローバル変数一覧

上記の関数を使った文書の読み込みプログラムは下記の様になります。

<?php
   while ( have_posts() ) :  // 内部ポインタが指す$wp_queryにデータがあるかをチェックしています
      the_post();                 // 投稿の情報を[$post]に取り込み、[$wp_query]の内部ポインタを1つ更新します
    // ドキュメント内の情報の表示等を記述します。
	endwhile;
 ?>

上記で[the_post()]で取り込まれた[$post]のデータ(※参考)

プロパティ データ型 解説
post_type string 投稿情報タイプ

投稿:'post'

固定ページ:'page'

ID int 投稿ID又はページID
post_title string 投稿タイトル又はページタイトル
post_name string 投稿スラッグ又はページスラッグ

※パーマリンク設定で%postname%を指定している場合

post_content string 投稿内容
post_excerpt string 抜粋内容
post_date string 投稿日時
post_date_gmt string 投稿日時(GMT)
post_modified string 更新日時
post_modified_gmt string 更新日時(GMT)

その中で、IDを取得する場合は下記になります。

<?php $id = $post -> ID;?>

 

関数一覧
  • 1.PHPとWordPressプログラム
  • 2.PHPの出力コマンド
  • 3.PHPの変数規則と文字連結
  • 4.PHPのif文
  • 5.PHPの配列とループ処理
  • 6.PHPのオブジェクトとループ処理
  • 7.PHPの文字列操作関数
  • 8.PHPファイルや関数の読み込み
  • 9.PHPのフォーム操作
  • array_keys()
  • array_reverse()
  • checkdate()
  • count()
  • date()
  • echo
  • explode()
  • implode()
  • in_array()
  • intval()
  • isset()
  • preg_match_all()
  • preg_match()
  • preg_replace()
  • preg_split()
  • print_r()
  • session_id()
  • session_start()
  • sprintf()
  • str_replace()
  • strpos()
  • trim()
  • var_dump()