PHPEncoder — это библиотека PHP для экспорта переменных и создания представлений PHP-кода для указанных переменных, аналогичная встроенной функции var_export()
. Однако по сравнению со встроенной функцией эта библиотека предоставляет больше возможностей для настройки вывода, что упрощает генерацию кода для различных целей, таких как читаемые файлы конфигурации или оптимизированные файлы кэша.
Цель этой библиотеки — устранить некоторые недостатки встроенной функции var_export()
. Например, невозможно контролировать количество пробелов в выводе и нет возможности выбирать между различными обозначениями массива. Эта библиотека также предоставляет функциональные возможности для преобразования объектов в код PHP, что действительно полезно по сравнению со встроенной функцией.
Большое количество параметров настройки в этой библиотеке позволяет создавать код, соответствующий вашим целям. Вы можете создать очень компактный код, когда вам нужно ограничить размер вывода, или вы можете создать код в стиле, который действительно подходит для любого из ваших динамически генерируемых файлов PHP.
Документация API доступна по адресу: http://kit.riimu.net/api/phpencoder/.
Самый простой способ установить эту библиотеку — использовать Composer для обработки ваших зависимостей. Чтобы установить эту библиотеку через Composer, просто выполните следующие два шага:
Получите composer.phar
, запустив установку Composer из командной строки в корне вашего проекта.
После запуска сценария установки файл composer.phar
должен находиться в корне вашего проекта, и вы можете выполнить следующую команду:
php composer.phar require "riimu/kit-phpencoder:^2.3"
После установки этой библиотеки через Composer вы можете загрузить ее, включив vendor/autoload.php
, созданный Composer во время установки.
Если вы уже знакомы с тем, как использовать Composer, вы также можете добавить библиотеку в качестве зависимости, добавив в свой проект следующий файл composer.json
и выполнив команду composer install
:
{
"require" : {
"riimu/kit-phpencoder" : " ^2.3 "
}
}
Если вы не хотите использовать Composer для загрузки библиотеки, вы также можете загрузить библиотеку вручную, загрузив последнюю версию и распаковав папку src
в свой проект. Затем вы можете включить предоставленный файл src/autoload.php
для загрузки классов библиотеки.
Наиболее подходящим методом, предоставляемым этой библиотекой, является метод encode()
, предоставляемый PHPEncoder
. Метод принимает любое значение в качестве аргумента и возвращает представление кода PHP для этого значения.
Например:
<?php
require ' vendor/autoload.php ' ;
$ encoder = new Riimu Kit PHPEncoder PHPEncoder ();
echo $ encoder -> encode ([ ' foo ' => ' bar ' , [ 1 , true , false , null , 1.0 ]]);
Это создаст следующий вывод:
[
'foo' => 'bar',
[1, true, false, null, 1.0],
]
Конечно, самой важной особенностью этой библиотеки является возможность настройки создаваемого PHP-кода. В качестве второго аргумента метод encode()
принимает массив параметров, которые можно использовать для настройки возвращаемого PHP-кода. Например:
<?php
require ' vendor/autoload.php ' ;
$ encoder = new Riimu Kit PHPEncoder PHPEncoder ();
echo $ encoder -> encode ([ ' foo ' => ' bar ' , [ 1 , true , false , null , 1.0 ]], [
' array.inline ' => false ,
' array.omit ' => false ,
' array.indent ' => 2 ,
' boolean.capitalize ' => true ,
' null.capitalize ' => true ,
]);
Это создаст следующий вывод:
[
'foo' => 'bar',
0 => [
0 => 1,
1 => TRUE,
2 => FALSE,
3 => NULL,
4 => 1.0,
],
]
Параметры кодирования позволяют настроить вывод метода encode()
. Эти параметры можно установить тремя различными способами:
PHPEncoder
.setOption()
.encode()
. Обратите внимание, что параметры, передаваемые методу encode()
являются временными и не применяются к последующим вызовам.
пробел : <логическое значение> (истина)
Если установлено значение false
, генерация всех дополнительных пробелов отключается, а все остальные параметры, влияющие на пробелы, игнорируются.
hex.capitalize : <логическое значение> (ложь)
Если установлено значение true
все шестнадцатеричные символы в выводе записываются в верхнем регистре, а не в нижнем.
null.capitalize : <логическое значение> (ложь)
Если установлено значение true
, все null
значения записываются в верхнем регистре, а не в нижнем.
boolean.capitalize : <логическое значение> (ложь)
Если установлено значение true
, все значения true
и false
записываются в верхнем регистре, а не в нижнем регистре.
целое число.тип : <"двоичный"|"восьмеричный"|"десятичный"|"шестнадцатеричный"> ("десятичный")
Измените синтаксис вывода целых чисел. Например, использование типа "hexadecimal"
выведет число 15
как 0xf
.
float.integers : <boolean|"all"> (false)
Если установлено значение true
, любое число с плавающей запятой, которое представляет целое число и имеет значение, которое точно представлено числом с плавающей запятой, будет закодировано как целое число, а не как число с плавающей запятой. (например, значение 2.0
будет закодировано как 2
). Чтобы включить значения, которые не представлены точно, вы можете установить опцию "all"
.
float.export : <логическое значение> (ложь)
Если установлено значение true
, числа с плавающей запятой кодируются с использованием var_export()
, что приводит к немного другому выводу нецелых чисел с плавающей запятой по сравнению со стандартным реализованным методом. В некоторых случаях это может дать более точные цифры, но с менее четким представлением.
float.precision : <целое число|ложь> (17)
Максимальная точность закодированных значений с плавающей запятой, что обычно также означает максимальное количество цифр в закодированных числах с плавающей запятой. Если для значения установлено значение false
, вместо этого будет использоваться параметр PHP serialize_precision
. Обратите внимание: из-за особенностей работы значений с плавающей запятой значение больше 17 не обеспечивает никакой дополнительной точности.
string.binary : <логическое значение> (ложь)
Если установлено значение true
любая строка, которая не является допустимой UTF-8, будет закодирована в кодировке Base 64 и обернута вызовом base64_decode()
.
string.escape : <логическое значение> (истина)
Если установлено значение true
, все строки, содержащие байты за пределами диапазона ASCII 32–126, будут записаны в двойные кавычки, а символы вне диапазона будут экранированы.
string.utf8 : <логическое значение> (ложь)
Если и для этой опции, и string.escape
установлено значение true
, все допустимые многобайтовые символы UTF-8 в строках кодируются с использованием синтаксиса кодовой точки Юникода PHP7. Обратите внимание, что этот синтаксис не работает в версиях PHP ниже 7.0.
string.classes : <string[]> ([])
Определяет список классов или префиксов пространства имен классов для классов, которые можно закодировать с помощью оператора разрешения классов ::class
при обнаружении в строках. например, предоставление значения ['Riimu\']
будет кодировать все строки, которые выглядят как имена классов в пространстве имен Riimu
например RiimuKitPHPEncoder::class
.
string.imports : <строка[]> ([])
Список импортов, используемых в результирующем файле кода, который позволяет записывать имена классов в более коротком формате. Список должен представлять собой ассоциативный массив с пространством имен или классом в качестве ключа и используемым именем в качестве значения. Используйте пустую строку для указания текущего пространства имен.
Например, если результирующий файл будет иметь namespace RiimuKitPHPEncoder;
и use PHPUnitFrameworkTestCase;
, вы можете настроить массив как ['Riimu\Kit\PHPEncoder\' => '', 'PHPUnit\Framework\TestCase' => 'TestCase']
array.short : <логическое значение> (истина)
Если установлено значение true
, массивы заключаются в квадратные скобки []
вместо использования длинной записи массива array()
.
array.base : <целое число|строка> (0)
Базовый отступ для массивов в виде количества пробелов или строки. Обеспечивает удобство, когда вам нужно вывести код в файл с определенным уровнем отступов.
array.indent : <целое число|строка> (4)
Величина отступа для одного уровня отступа в виде количества пробелов или строки.
array.align : <логическое значение> (ложь)
Если установлено значение true
, операторы присваивания массива =>
выравниваются по одному и тому же столбцу с помощью пробелов. Даже если они включены, параметры array.omit
и array.inline
по-прежнему учитываются, но только если все ключи в конкретном массиве могут быть опущены.
array.inline : <логическое значение|целое число> (70)
Если установлено значение true
, любой массив, который можно записать без каких-либо ключей массива, будет записан в одну строку. Если вместо этого указано целое число, массив будет записан в одну строку, только если он не превышает это количество символов. Этот параметр не имеет эффекта, если для array.omit
установлено значение false.
array.omit : <логическое значение> (истина)
Если установлено значение true
, любые избыточные ключи массива не будут включены (например, массив [0 => 'a', 1 => 'b']
будет закодирован так же, как ['a', 'b']
).
array.eol : <строка|false> (ложь)
Символ конца строки, используемый при выводе массива. Если установлено значение false
, вместо него будет использоваться PHP_EOL
по умолчанию.
object.method : <логическое значение> (истина)
Если установлено значение true
, любой закодированный объект будет проверяться на наличие методов toPHP()
и toPHPValue()
. Если метод toPHP()
существует, возвращаемая строка будет использоваться как представление кода PHP объекта. Если вместо этого существует метод toPHPValue()
, возвращаемое значение будет закодировано как PHP и использовано в качестве кодового представления объекта.
object.format : <строка> («вары»)
Формат кодировки объекта по умолчанию. Возможные значения:
string
преобразует объект в строку, а затем кодирует эту строку как PHP.serialize
сериализует объект и оборачивает его с помощью unserialize()
export
имитирует представление объекта var_export()
array
преобразует объект в массив и кодирует этот массивvars
превращает объект в массив с помощью get_object_vars()
iterate
превращает объект в массив, перебирая его с помощью foreach
object.cast : <логическое значение> (истина)
Добавлять ли приведение (object)
перед массивами, сгенерированными из объектов, или нет при использовании форматов кодирования объектов vars
, array
или iterate
.
recursion.detect : <логическое значение> (истина)
Если установлено значение true
, кодер будет пытаться обнаружить циклические ссылки в массивах и объектах, чтобы избежать бесконечных циклов.
recursion.ignore : <логическое значение> (ложь)
Если установлено значение true
, любая циклическая ссылка будет заменена null
вместо создания исключения.
recursion.max : <integer|false> (ложь)
Максимальное количество уровней при кодировании массивов и объектов. Исключение выдается при превышении максимального значения. Установите значение false
чтобы не иметь ограничений.
На эту библиотеку распространяется авторское право (c) 2013–2022 Риикка Каллиомяки.
См. ЛИЦЕНЗИЮ для получения информации о лицензии и копировании.