Класс 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 таблиц базы данных.