Mat*_*lly 44 php mysql oop casting
我想基于MySQL数据库中的字符串定义的类型在PHP中创建一个对象.数据库表包含以下列的列和示例数据:
id | type | propertyVal
----+------+-------------
1 | foo | lorum
2 | bar | ipsum
Run Code Online (Sandbox Code Playgroud)
...使用PHP数据类型
class ParentClass {...}
class Foo extends ParentClass {private $id, $propertyVal; ...}
class Bar extends ParentClass {private $id, $propertyVal; ...}
//...(more classes)...
Run Code Online (Sandbox Code Playgroud)
只使用一个查询,我想按id选择一行,并创建一个类型的对象,定义表的类型列,其中SELECTed行中的其他列被分配给新创建的对象.
我在考虑使用:
mysql_fetch_object()但是知道无法动态创建基于字符串的类型.怎么做到这一点?
mea*_*gar 103
但是知道无法动态创建基于字符串的类型.怎么做到这一点?
你可以很容易和自然地做到这一点:
$type = 'myclass';
$instance = new $type;
Run Code Online (Sandbox Code Playgroud)
如果查询返回关联数组,则可以使用类似语法分配属性:
// 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;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用一种非常简洁的语法,这是我几个月前学到的,不依赖于临时变量.这是我使用POST变量加载特定类的示例:
$eb = new ${!${''} = $_POST['entity'] . 'Binding'}();
Run Code Online (Sandbox Code Playgroud)
但是,在您的具体情况下,您可以使用PDO解决它.它有一个获取模式,允许第一列的值成为行实例化的类.
$sth->fetch(PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE);
Run Code Online (Sandbox Code Playgroud)
$instance = new $classname; // i.e. $type in your case
Run Code Online (Sandbox Code Playgroud)
效果很好......
| 归档时间: |
|
| 查看次数: |
56421 次 |
| 最近记录: |