Модуль (\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 должен быть доступ к адаптеру базы данных;
- Все созданные модели должны быть в одном экземпляре (синглтоны), только не пишите о том, как это плохо :)