Динамично создайте PHP основанный на объектах на строке

Я хотел бы создать объект в 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)...

Используя только один запрос, я хотел бы ВЫБРАТЬ строку идентификатором и создать объект типа, определяют столбец типа таблицы с другими столбцами в ВЫБРАННОЙ строке, присваиваемой недавно созданному объекту.

Я думал что использование:

  1. mysql_fetch_object()
  2. Чтение атрибута типа
  3. Создание объекта с типом, определенным атрибутом типа

Но не знайте ни о каком способе динамично создать тип на основе строки. Как каждый делает это?

44
задан meagar 29 March 2012 в 12:43
поделиться

2 ответа

Но неизвестен способ динамического создания типа на основе строки. Как это сделать?

Вы можете сделать это довольно легко и естественно:

$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;
}
103
ответ дан 26 November 2019 в 21:47
поделиться

Необходимо ограничить частоту кадров до X кадров в секунду (чаще всего используется 60 FPS). Это обычная функция в большинстве мультимедийных рамок, включая SFML. Для SFML следует обратиться к методу Window/RenderWindow SetFramerateLimit (неподписанный предел int) .

-121--4541810-

Файл сохраняется во временном каталоге в момент его загрузки, но вы можете использовать $ _ FILES ['uploadedfile'] ['tmp _ name'] для его чтения без необходимости сохранения в постоянном месте.

-121--1342853-
$instance = new $classname; // i.e. $type in your case

Работает очень хорошо...

7
ответ дан 26 November 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: