我想基于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 Select 一行,并创建一个类型为define the table的type column的对象,将所选行中的其他列分配给新创建的对象.

我当时在想:

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

但我们不知道如何基于字符串动态创建类型.这是怎么做到的?

推荐答案

但我们不知道如何基于字符串动态创建类型.这是怎么做到的?

你可以轻松自然地做到:

$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;
}

Mysql相关问答推荐

是否有一种方法可以 Select 表中具有特定列值的行,该行还显示phpmyadmin中原始表中的行号?

MySQL问题难以将文本字符串转换为正确的日期格式

mysql使用LIKE查找二进制字段有问题

MySQL INSERT INSERT ON DIPLICATE KEY UPDATE WITH COMPAY PRIMARY KEY失败

Google Sheet查询以提取数据并用值替换复选框.(差异)

如何将数据导入MySQL中的master/replica struct

为两个中的每一个 Select 最大和最小传递条件

Mysql,显示谁已经和没有 Select 退出巴士服务

MySQL查询以获取日期范围内的租赁订单

如何使用 C++ 连接 mySQL 数据库

在 Android 上运行 AMP (apache mysql php)

如何将 MySQL 5.7 更新到新的 MySQL 8.0?

问号在 MySQL 中WHERE column = ?的意义是什么?

如何改进 INSERT INTO ... SELECT 锁定行为

加快 mysql 转储和导入

BIGINT mysql 性能与 INT 相比

MySQL 更新连接表

按 COUNT(*) 过滤?

如何允许 django 管理员将字段设置为 NULL?

我在哪里可以下载 mysql jdbc jar?