シリアライズ
クラスの初期化と型チェックを処理するserializeとunserializeを使用する方がはるかに簡単です。
例えば:
$person = new Person();
$person->firstname = 'Chuck';
$person->lastname = 'Jones';
$blob = serialize($person); // put blob in the database
インターフェイスのシリアル化/シリアル化解除
このアプローチに従う場合give_data()
(たとえば、クラス プロパティがデータベース内の列名と一致するようにするため)、interfaceを指定する必要があります。インターフェイスは、呼び出しているクラスが利用可能な unserialize メソッドを持ち、期待どおりに動作することを保証します (以下の例ではファクトリ パターンを使用しています)。
<?php
interface ArraySerializable
{
public static function createFromArray($array);
}
class Person implements ArraySerializable
{
public static function createFromArray($array)
{
$temp = new self();
$temp->firstname = $array['first_name'];
$temp->lastname = $array['last_name'];
return $temp;
}
}
次に、テストしますclass_implements()
$class_name = 'Person';
if (class_exists($class_name)
&& in_array('ArraySerializable', class_implements($class_name))
){
$person = $class_name::createFromArray(array(
'last_name' => 'Jones',
'first_name' => 'Chuck'
));
var_dump($person);
}
これをより多くのクラスで使用するにはArraySerializable
、それぞれのインターフェイスを実装するだけです。
これをゼロからロールバックしたくない場合は、Doctrineのようなフル機能の ORM を使用して、データベースを完全に抽象化できます。