「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
Movable Type 4.15β4とメタデータの扱い
Movable Type 4.15のβ4が公開されました。
米国時間の22日に公開されましたが、不具合があっていったん公開が取りやめられ、23日に修正版(β4b)が公開されました。
Movable Type 4.15β4では、「メタデータ」の扱い方が変化しています。
1.メタデータを独立したテーブルに保存
Change Logを見ると、こまごました不具合修正が多く行われています。
ただ、システム内部に一点大きな変更があります。
これまででは、ブログ記事等のオブジェクトにメタデータ(付随的なデータ)を保存する際には、テーブル内の「XXX_meta」というフィールドが使われていました。
4.15β4ではこの点が変更され、メタデータを保存するために独立したテーブルが使われるようになりました。
これによって、メタデータへのアクセスをより柔軟に行うことができるようになります。
2.プラグインでメタデータにアクセスする
プラグイン作者にとっては、「メタデータにどうやってアクセスするのか」という点に関心があるかと思います。
今のところ、MT::Metaクラス(MT_DIR/lib/MT/Meta.pm)のドキュメントがあります。
ただ、これは新規のクラスにメタデータ用テーブルを追加するときの話です。
既存のテーブルにメタデータのフィールドをどのように追加するのかは、今のところドキュメントがない模様です。
試してみたところ、以下のようにすることで、既存のテーブルにメタデータのフィールドを追加することができました。
2-1.レジストリにメタデータのフィールドの情報を追加
まず、レジストリの初期化(init_registry)の際に、以下のような書き方で、レジストリにメタデータのフィールドの情報を追加します。
sub init_registry { my $plugin = shift; $plugin->registry({ object_types => { 'クラス' => { 'フィールド名' => 'データ型 meta', 'フィールド名' => 'データ型 meta', ・・・ }, ・・・ }, }); }
例えば、ブログ記事(entry)に「meta_test」という文字列型(string)のフィールドを追加するには、以下のようにします。
sub init_registry { my $plugin = shift; $plugin->registry({ object_types => { 'entry' => { 'meta_test' => 'string meta', }, ・・・ }, }); }
また、プラグインの作成(new)の際に、以下のようにschema_versionを指定して、データベースのアップグレードの処理が行われるようにします。
my $plugin = __PACKAGE__->new({ ・ ・ ・ schema_version => 'x.xx', }); MT->add_plugin($plugin);
2-2.メタデータへのアクセス
loadメソッドでオブジェクトを読み込むと、メタデータも同時に読み込まれ、オブジェクトのプロパティに自動的にマッピングされます。
これによって、メタデータのフィールドは、既存のフィールドと同じように、「オブジェクト->プロパティ」の形でアクセスすることができます。
例えば、前述の手順で、ブログ記事に「meta_test」というフィールドを追加したとします。
$entryがブログ記事をさしているとすると、そのブログ記事のmeta_testフィールドに「foo」という値を代入するには、以下のように書きます。
$entry->meta_test('foo');
また、meta_testフィールドの値を変数$meta_testに代入するには、以下のように書きます。
$meta_test = $entry->meta_test;