基于字符串动态创建 PHP 对象

2022-08-30 10:41:35

我想在PHP中创建一个基于MySQL数据库中的字符串定义的类型的对象。数据库表包含以下列和示例数据:

 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 选择一行,并创建一个类型的对象,定义表的类型列,并将 SELECTed 行中的其他列分配给新创建的对象。

我在想使用:

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

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


答案 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;
}

答案 2

您可以使用几个月前学到的非常整洁的语法,它不依赖于临时变量。下面是一个示例,其中我使用 POST 变量来加载特定类:

$eb = new ${!${''} = $_POST['entity'] . 'Binding'}();

但是,在您的特定情况下,您将能够通过使用PDO来解决它。它具有读取模式,该模式允许第一列的值成为行实例化到的类。

$sth->fetch(PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE);

推荐