, как говорит silkfire, это может быть достигнуто с помощью специальных режимов PDO, так что вот пример. Используя те же значения базы данных и определенные объекты:
id | type | propertyVal
----+------+-------------
1 | foo | lorum
2 | bar | ipsum
class ParentClass {...}
class Foo extends ParentClass {private $id, $propertyVal; ...}
class Bar extends ParentClass {private $id, $propertyVal; ...}
//...(more classes)...
одним запросом (сначала необходимо указать поле, содержащее имя класса):
$stmt = $db->prepare('SELECT type,id,propertyVal FROM table WHERE id=1');
$stmt->execute();
$foo = $stmt->fetch(PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE);
var_dump($foo); // $foo is a newly created object of class foo, with properties named like and containing the value of subsequent fields
это круто, но со временем становится круче
$stmt = $db->prepare('SELECT type,id,propertyVal FROM table');
$stmt->execute();
while ($object = $stmt->fetch(PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE))
{var_dump($object);} // here all desired objects, dynamically constructed accordingly to the first column returned by the query
вы можете определить конструктор (который будет вызываться после того, как значения из базы данных назначены свойствам) для работы с этими динамически назначаемыми свойствами, например, путем замены строки ее значением в верхнем регистре
class foo
{function __construct ()
{$this->uper = strtoupper($this->propertyVal);}}