1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/scgywx-protox

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Введение

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 )

Вы можете оставить комментарий после Вход в систему

Введение

Форматирование типов данных в PHP. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/scgywx-protox.git
git@api.gitlife.ru:oschina-mirror/scgywx-protox.git
oschina-mirror
scgywx-protox
scgywx-protox
master