forked from mirzaev/minimal
85 lines
1.9 KiB
PHP
85 lines
1.9 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace mirzaev\minimal\models;
|
||
|
||
use mirzaev\minimal\core;
|
||
|
||
use PDO;
|
||
|
||
use Exception;
|
||
|
||
/**
|
||
* Модель
|
||
*
|
||
* @package mirzaev\minimal\models
|
||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||
*/
|
||
class model
|
||
{
|
||
/**
|
||
* @var PDO $db Соединение с базой данных
|
||
*/
|
||
protected PDO $db;
|
||
|
||
/**
|
||
* Конструктор
|
||
*
|
||
* @param PDO|null $db Соединение с базой данных
|
||
*/
|
||
public function __construct(PDO $db = null)
|
||
{
|
||
$this->db = $db ?? core::db();
|
||
}
|
||
|
||
/**
|
||
* Записать свойство
|
||
*
|
||
* @param mixed $name Название
|
||
* @param mixed $value Значение
|
||
*/
|
||
public function __set(string $name, mixed $value): void
|
||
{
|
||
if ($name === 'db') {
|
||
if (!isset($this->db)) {
|
||
$this->db = $value;
|
||
return;
|
||
} else {
|
||
throw new Exception('Запрещено переопределять соединение с базой данных');
|
||
}
|
||
}
|
||
|
||
throw new Exception('Свойство не найдено: ' . $name);
|
||
}
|
||
|
||
/**
|
||
* Прочитать свойство
|
||
*
|
||
* @param string $name Название
|
||
*/
|
||
public function __get(string $name): mixed
|
||
{
|
||
if ($name === 'db') {
|
||
return $this->db;
|
||
}
|
||
|
||
throw new Exception('Свойство не найдено: ' . $name);
|
||
}
|
||
|
||
|
||
/**
|
||
* Проверить свойство на инициализированность
|
||
*
|
||
* @param string $name Название
|
||
*/
|
||
public function __isset(string $name): bool
|
||
{
|
||
if ($name === 'db') {
|
||
return isset($this->db);
|
||
}
|
||
|
||
throw new Exception('Свойство не найдено: ' . $name);
|
||
}
|
||
}
|