Класс fsDBTable (по сути это совокупность классов) был разработан мной для системы управления OnePageCMS с целью облегчения работы с базой данных. Данный класс можно найти в сборке указанной CMS в папке kernel файл fsBase.
Основным преимуществом данного класса является вариативность его использования, а так же автоматизированное создание внутренней структуры таблицы, что избавляет Вас от рутинной работы по описанию полей базы данных в PHP.
Перед тем как описать сам класс, необходимо оговорить несколько вспомогательных классов fsStruct, fsDBsettings, fsDBconnection, Validator.
fsDBconnection
Данный класс служит для отправки запросов в базе данных. В явном виде данный класс нигде не используется, поэтому описывать его особого смысла нет. В конструкторе принимает массив настроек для соединения с базой данных. По сути является оболочкой для mysqli_connect.
fsStruct
Базовый класс, реализующий структуру для хранения данных. Общая структура класса:
class fsStruct { protected $Fields = Array(); //Внутренний массив данных protected $AllowNull; //Флаг динамического создания полей public function GetStruct(); public function Clear($Filter = Array()); public function ToArray(); public function Exists($field, $check_numeric = false); public function Delete($field = false); public function __construct($Fields = null, $AllowNull = false); public function __destruct(); public function __get($field); public function __set($field, $value); }
__construct:
$Fields — Ассоциативный массив начальный данных в виде
$Arr[‘имя_поля’] = Array(‘Value’ => ‘значение’, [‘ReadOnly’ => [true|false]]);
$AllowNull — bool. Разрешает или запрещает создание новых полей в классе;
Например:
$Arr = Array(); $Arr['name'] = Array('Value' => 'Иван', 'ReadOnly' => true); $Arr['last'] = Array('Value' => 'Иванов', 'ReadOnly' => true); $Arr['age'] = Array('Value' => 18); $struct_1 = new fsStruct($Arr); $struct_2 = new fsStruct($Arr, true); echo $struct_1->name.' '.$struct_1->last.' '.$struct_1->age; echo $struct_1->middle; //Пустая строка (поля нет) echo $struct_2->middle; //Пустая строка (поля нет) $struct_1->name = 'Петя'; //Ошибка, поле только для чтения $struct_1->age = 20; //ОК $struct_1->middle = 'Иванов'; //Ошибка, создание новых полей запрещено $struct_2->middle = 'Иванов'; //ОК
Примечание: Дальнейшие примеры будут использовать данные две структуры!
$Array = function GetStruct()
Функция возвращает имена хранящихся полей.
$Arr = $struct_2->GetStruct(); //$Arr = Array('name', 'last', 'age', 'middle');
void = function Clear($Filter = Array())
Функция очищает данные полей, указанных в $Filter при условии что они не доступны только для чтения.
$struct_1->Clear(Array('age', 'last')); echo $struct_1->age; //Пустая строка echo $struct_1->last; //Иванов
$Array = function ToArray()
Функция возвращает ассоциативный массив в виде $A[‘ИмяПоля’] = ‘Значение’;
$Arr = $struct_1->ToArray(); //$Arr = Array('name' => 'Иван', 'last' => 'Иванов', 'age' => 20);
$Bool = function Exists($field, $check_numeric = false)
Функция проверки наличия поля с именем $field. $check_numeric — дополнительная проверка, является ли значение данного поля числом.
$struct_1->Exists('name'); //true $struct_1->Exists('name', true); //false $struct_1->Exists('age'); //true $struct_1->Exists('age', true); //true $struct_1->Exists('middle'); //false $struct_2->Exists('middle'); //true
void = function Delete($field = false)
Удаляет поле с именем $field. Если $filed не указано, то удаляются все поля.
$struct_2->Exists('middle'); //true $struct_2->Delete('middle'); $struct_2->Exists('middle'); //false
fsDBsettings extends fsStruct
Данный класс является частным случаем класса fsStruct с реализацией четырех полей «server», «user», «password», «base». Данные параметры принимаются в конструкторе. Так же данные о соединении, могут быть автоматически переданы в данный класс, путем реализации статического класса DBsettings.
Например:
$Arr = Array(); $Arr["server"] = Array("Value" => "localhost"); $Arr["user"] = Array("Value" => "root"); $Arr["password"] = Array("Value" => "pwd"); $Arr["base"] = Array("Value" => "base_1"); $Settings_1 = fsDBsettings($Arr); class DBsettings { public static $server = "localhost"; public static $user = "root"; public static $password = "pwd"; public static $base = "base_1"; } $Settings_2 = fsDBsettings(); //В данном случае $Settings_1 и $Settings_2 абсолютно одинаковы.
Validator
Статический класс. Является вспомогательным для класса fsDBTable. Реализует методы проверки типов данных полей mysql таблиц базы данных.