一尘不染

根据字符串动态创建PHP对象

mysql

我想基于由MySQL数据库中的字符串定义的类型在PHP中创建一个对象。数据库表具有以下列和样本数据:

 id | type | propertyVal
----+------+-------------
  1 | foo  | lorum
  2 | bar  | ipsum

…使用PHP数据类型

class ParentClass {...}
class Foo extends ParentClass {private $id, $propertyVal; ...}
class Bar extends ParentClass {private $id, $propertyVal; ...} 
//...(more classes)...

我只想使用一个查询,通过ID选择一行,然后创建一个类型为Object的对象,该对象定义表的type列,并将SELECTed行中的其他列分配给新创建的对象。

我当时在想使用:

  1. mysql_fetch_object()
  2. 读取类型属性
  3. 创建具有由type属性定义的类型的对象

但是没有办法动态地基于字符串创建类型。如何做到这一点?


阅读 628

收藏
2020-05-17

共1个答案

一尘不染

但是没有办法动态地基于字符串创建类型。如何做到这一点?

您可以轻松自然地做到这一点:

$type = 'myclass';

$instance = new $type;

如果您的查询返回的是关联数组,则可以使用类似的语法分配属性:

// build object
$type = $row['type'];
$instance = new $type;

// remove 'type' so we don't set $instance->type = 'foo' or 'bar'
unset($row['type']);

// assign properties
foreach ($row as $property => $value) {
   $instance->$property = $value;
}
2020-05-17