Protox — это инструмент для форматирования типов данных в PHP, который используется для преобразования и инициализации данных. Он позволяет избежать множества ручных операций по инициализации и преобразованию типов.
Преобразованные данные удобно использовать для кодирования с помощью JSON и AMF, что решает проблему неправильного преобразования int в string.
Для работы с Protox достаточно один раз определить данные и один раз их преобразовать.
В определённом каталоге создаётся файл PHP, в котором определяется класс с именем {имя файла}_protocol, наследуемый от Protox.
Определяется член-переменная fields:
//person.php
class person_protocol extends protox
{
protected $fields = array(
'name' => 'string',//string类型
'age' => 'int',//int类型
'phone' => 'string',//string类型
'address' => 'string',//string类型
'qq' => 'string|optional',//string类型,并且 является опциональным
'email' => 'string|optional',//string тип, и является опциональным
);
}
Чтобы выполнить преобразование, нужно вызвать функцию Protox::make({имя файла}, {параметр}).
//test.php
define('ROOT', dirname(__FILE__));
require('protox.php');
protox::init(array(
'path' => ROOT . '/protocol/',//устанавливаем каталог типов
));
$input = array(
'name' => 'test',
'age' => '123a',
'qq' => 123456,
'phone' => 111
);
$output = protox::make('person', $input);
var_dump($output);
/*
Можно увидеть, что все ключи преобразуются в соответствии с определёнными типами, а для обязательных атрибутов устанавливаются начальные значения по умолчанию.
array(5) {
["name"]=>
string(4) "test"
["age"]=>
int(123)
["phone"]=>
string(3) "111"
["address"]=>
string(0) ""
["qq"]=>
string(6) "123456"
}
*/
Иногда может потребоваться не преобразовывать данные, а использовать параметры напрямую. В этом случае можно установить значение fields равным *:
//mytype.php
class mytype_protocol extends protox
{
protected $fields = '*';
}
Если мы не хотим зависеть от какого-либо ключа, а просто хотим отформатировать массив, например, данные, полученные из MySQL, которые необходимо отформатировать и вывести в формате JSON, можно сделать следующее:
//product.php
class product_proto extends protox
{
protected $fields = array(
'id' => 'int',
'title' => 'string',
'price' => 'int',
'details' => 'string',
'picture' => 'string|optional'
);
}
//mylist.php
class mylist_protocol extends protox
{
//если product не требуется совместно использовать, а только в этом классе, то можно скопировать product_proto в этот файл, избегая создания множества файлов для сложного типа
protected $fields = 'array.product';
}
На данный момент поддерживаются следующие типы: int, double, string, array, object.
При этом array и object могут иметь подтипы, но также могут быть без них. Если подтип пуст, данные добавляются в массив без изменений.
Например, array.int представляет собой массив, каждый элемент которого имеет тип int. Выводимые данные начинаются с ключа 0 (если входные данные имеют ключ, он будет проигнорирован).
Таким образом, object.product представляет объект, каждый член которого имеет тип product. Ключом в выходных данных будет соответствующий ключ входных данных.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )