абстрактный класс с общим методом

165
08 февраля 2020, 12:50
abstract class Entity {
    abstract public function getEntityType() : int;
    public function compareHash(array $dataItem) : bool {
        // todo
        // Return big array from data base
        $hashBase = (new HashBase())->getData($this->getEntityType());
    }
}

Каждый наследник реализует метод getEntityType, и $hashBase у всех будет свой. Но надо сделать так, чтобы при каждом вызове метода compareHash для каждого наследника была выборка из БД (т.е. $hashBase).

Наверное нужен singleton ? Илистатическое свойство?

Извиняюсь за свой англ

Answer 1

Добавь статическое поле $hashBaseArr, оно будет одно для всех наследников, и в него записывай значения где ключ - это имя класса наследника. Примерно вот так:

abstract class Entity {
    abstract public function getEntityType() : int;
    public static $hashBaseArr = [];
    public function compareHash(array $dataItem) : bool {
        // todo
        // Return big array from data base
        if ( !isset(static::$hashBaseArr[get_called_class()]) ) {
            static::$hashBaseArr[get_called_class()] = (new HashBase())->getData($this->getEntityType());
        }
    }
}
READ ALSO
Блокировка сессий в php

Блокировка сессий в php

Всем приветКак мы знаем, php по умолчанию хранит сессию в файлах, и осуществляет блокировку на этот файл сессии, при ее открытии

187
strpos код не срабатывает PHP

strpos код не срабатывает PHP

Есть такой код для фильтрации URLНо при каждом вводе данных срабатывает последный вариант

207
Как из исходного имени файла выводить только название без расширения?

Как из исходного имени файла выводить только название без расширения?

Название моего файла indexphp, мне надо сделать index

175
Вывод во view пустой результат ActiveRecord.YII2

Вывод во view пустой результат ActiveRecord.YII2

Я только что начал изучать Yii2 и сразу столкнулся с недопониманием того, как выводить результат запроса к базе во viewСоздал таблицу post и пытаюсь...

186