Посмотрим, смогу ли я описать это правильно …
У меня есть абстрактный класс, который, когда другие классы распространяются от него, я хотел бы, чтобы данные абстрактного класса были сброшены до нуля.
Идея состоит в том, что у меня есть куча классов, расширяющих ее и использующая таблицу MySQL для структуры данных. Я не хочу запрашивать БД с каждым экземпляром класса для определения данных класса («SHOW COLUMNS FROM tablename
).
Поэтому для каждого класса я бы хотел, чтобы это было для каждого: «Мы создали этот класс раньше? Если это так, мы знаем структуру класса, если нет, захватим столбцы таблицы и создадим класс, а также сохраним столбцы таблицы для позже использовать ".
Для проверки моей идеи я использовал следующее:
$columns = array("Column 1", "Column 2", "Column 3"); abstract class AbstractClass { protected static $colFields = array(); public function __construct() { $this->setVars(); } private function setVars() { global $columns; if (count(self::$colFields) == 0) { var_dump("Array length is 0"); foreach ($columns as $key) { self::$colFields[] = $key; if (!isset($this->$key)) $this->$key = null; } } else { var_dump("Array length is not 0"); foreach (self::$colFields as $key) { $this->$key = null; } } } public function test() { var_dump($this); } } class ObjectA extends AbstractClass {}; class ObjectB extends AbstractClass {}; $objectAA = new ObjectA(); $objectAB = new ObjectA(); $objectAC = new ObjectA(); $objectAC->test(); $objectBA = new ObjectB(); $objectBB = new ObjectB(); $objectBC = new ObjectB(); $objectBC->test();
И вывод скрипта:
string (17) "Длина массива равна 0"
string (21) «Длина массива не равна 0»
string (21) «Длина массива не равна 0»
object (ObjectA) # 3 (4) {
[ "Имя класса": защита] =>
string (7) "ObjectA"
["Столбец 1"] =>
НОЛЬ
["Столбец 2"] =>
НОЛЬ
["Столбец 3"] =>
НОЛЬ
}
string (21) «Длина массива не равна 0»
string (21) «Длина массива не равна 0»
string (21) «Длина массива не равна 0»
object (ObjectB) # 6 (4) {
[ "Имя класса": защита] =>
string (7) "ObjectB"
["Столбец 1"] =>
НОЛЬ
["Столбец 2"] =>
НОЛЬ
["Столбец 3"] =>
НОЛЬ
}
Я ожидаю, что первый экземпляр объекта ObjectB будет выводить сегмент «Array length is 0», а затем продолжить.
Может ли кто-нибудь помочь?