连载
使用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来完全抽象数据库。