Есть около тысячи объектов, по каждому из которых необходимо сделать по три запроса в БД, обработать результат и наполнить data class
'ы.
Само собой напросилось решение с тремя синглтонами, хранящими подготовленные запросы и наследующими от одного абстрактного класса с общими методами.
Родитель:
abstract class RequestSingleton
{
private static $instance;
private $stmt;
/** @var array */
private $params;
private static $binded = false;
abstract protected function getSql(): string;
abstract protected function prepareParamsArray($params): array;
abstract protected function parse(array $result);
private function __construct() {
$this->stmt = SMDBSS::getDb()->prepare($this->getSql());
}
private static function getInstance(): self {
if (self::$instance === null) self::$instance = new static();
return self::$instance;
}
public static function get($params) {
$instance = self::getInstance();
$instance->params = $instance->prepareParamsArray($params);
if (!self::$binded)
$instance->bindParams();
$instance->stmt->execute();
return $instance->parse($instance->stmt->fetchAll());
}
private function bindParams() {
foreach ($this->params as $key => $value) {
$this->stmt->bindParam($key, $this->params[ $key ]);
}
self::$binded = true;
}
}
Потомок:
class CiByIp extends RequestSingleton
{
protected function getSql(): string {
return 'SELECT LOGICAL_NAME AS ci FROM DEVICE2M1 WHERE IP_ADDRESS=:ip';
}
protected function prepareParamsArray($params): array {
return ['ip' => $params];
}
protected function parse(array $result): string {
return empty($result) ? '' : $result[0]['ci'];
}
}
И вот что-то похоже я сам себя запутал. $instance
то для них всех будет одним, тем, который первым создался.
Вопрос к знатокам - что делать!? В том смысле, что делать три отдельных класса с дублированием кучи кода не хочется и запросы подготавливать надо только один раз.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
С чем может быть связана проблема? На сайте пропала часть футера и весь хеадер, файлы перезаливал, не помогло
Использую Virtuemart на Joomla в качестве ознакомления с продукцией, без использования корзиныНужно выводить цены в двух валютах, но без дублирования,...
Делаю парсер цен и другой инфы с сайтаВот ссылка на всю эту инфу: https://loot