27cm
@27cm
TODO: Написать статус

Как можно переписать код, используя ServiceManager или DI?

Модуль (\module\Application\Module.php):
namespace Application;

use Zend\Db\Adapter\Adapter;

class Module
{
    static protected $adapter;

    static public function getAdapter()
    {
        if (!isset(static::$adapter))
        {
            static::$adapter = new Adapter(array(
                'driver' => 'Mysqli',
                'database' => 'data',
                'username' => 'root',
                'password' => '',
            ));
        }

        return static::$adapter;
    }
}


Абстрактный класс модели данных (\module\Application\src\Application\Model.php):
namespace Application;

abstract class Model
{
    static public $instances = array();
    
    public function __construct($id)
    {
        $adapter = Module::getAdapter();
        $table = static::$table;
        
        // Получение данных из таблицы $table по $id
    }

    static public function getInstance($id)
    {
        $class = get_called_class();
        if (!array_key_exists($class, static::$instances)) {
            static::$instances[$class] = array();
        }

        if (!array_key_exists($id, self::$instances[$class])) {
            static::$instances[$class][$id] = new static($id);
        }

        return static::$instances[$class][$id];
    }
}


Пользователь (\module\Application\src\Application\Model\User.php):
namespace Application\Model;

use Application\Model;

class User extends Model
{
    static public $table = 'users';    
}


- У абстрактного класса Model должен быть доступ к адаптеру базы данных;
- Все созданные модели должны быть в одном экземпляре (синглтоны), только не пишите о том, как это плохо :)
  • Вопрос задан
  • 2351 просмотр
Решения вопроса 1
undefine
@undefine
Senior Software Engineer / PHP
Начните с того, что Module не должен знать о том, как создавать Adapter. Что Model должна явно зависеть от Module (и, наверное, не должна знать ничего об Adapter).
Очень хорошая статья была на Хабре: Inversion of Control: Методы реализации с примерам...
Также советую почитать: Are Static Methods/Variables bad practice?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы