PHPEncoder是一个 PHP 库,用于导出变量并为所述变量生成 PHP 代码表示,类似于内置函数var_export()
。然而,与内置函数相比,该库提供了更多选项来自定义输出,这使得更容易生成用于不同类型目的的代码,例如可读配置文件或优化的缓存文件。
该库的目的是解决内置var_export()
的一些缺点。例如,无法控制输出中的空白量,也无法在不同的数组表示法之间进行选择。该库还提供将对象转换为 PHP 代码的功能,与内置函数相比,该功能实际上很有用。
该库中的大量自定义选项允许您创建适合您目的的代码。当您需要限制输出的大小时,您可以创建非常紧凑的代码,或者您可以以实际适合任何动态生成的 PHP 文件的样式创建代码。
API 文档位于:http://kit.riimu.net/api/phpencoder/
安装此库的最简单方法是使用 Composer 来处理依赖项。要通过 Composer 安装此库,只需执行以下两个步骤:
通过在项目根目录中运行 Composer 命令行安装来获取composer.phar
。
运行安装脚本后,项目根目录中应该有composer.phar
文件,并且可以运行以下命令:
php composer.phar require "riimu/kit-phpencoder:^2.3"
通过 Composer 安装此库后,您可以通过包含 Composer 在安装过程中生成的vendor/autoload.php
文件来加载该库。
如果您已经熟悉如何使用 Composer,您也可以通过将以下composer.json
文件添加到您的项目并运行composer install
命令来将该库添加为依赖项:
{
"require" : {
"riimu/kit-phpencoder" : " ^2.3 "
}
}
如果您不想使用 Composer 加载库,您还可以通过下载最新版本并将src
文件夹解压到您的项目来手动下载库。然后,您可以包含提供的src/autoload.php
文件来加载库类。
该库提供的最相关的方法是PHPEncoder
提供的encode()
方法。该方法接受任何值作为参数并返回该值的 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()
方法的选项只是临时的,不适用于后续调用。
空格:<布尔值>(true)
当设置为false
时,将禁用所有额外空白的生成,并且会忽略影响空白的所有其他设置。
hex.capitalize : <布尔值> (假)
当设置为true
时,输出中的所有十六进制字符都使用大写而不是小写编写。
null.capitalize : <布尔值> (假)
当设置为true
时,所有null
值都以大写而不是小写形式写入。
boolean.capitalize : <boolean> (false)
当设置为true
时,所有true
和false
值都以大写而不是小写形式写入。
整数类型:<“二进制”|“八进制”|“十进制”|“十六进制”>(“十进制”)
更改整数的输出语法。例如,使用类型"hexadecimal"
会将数字15
输出为0xf
。
float.integers : <boolean|"all"> (false)
当设置为true
时,任何表示整数且具有由浮点数准确表示的值的浮点数都将被编码为整数而不是浮点数。 (例如,值2.0
将被编码为2
)。要包含未准确表示的值,您可以将选项设置为"all"
。
float.export : <布尔值> (假)
当设置为true
时,使用var_export()
对浮点数进行编码,与标准实现的方法相比,这会导致非整数浮点数的输出略有不同。在某些情况下,这可能会产生更准确的数字,但表示形式不太清晰。
浮点精度:<整数|假> (17)
编码浮点值的最大精度,通常也意味着编码浮点数的最大位数。如果该值设置为false
,则将使用 PHP ini 设置serialize_precision
。请注意,由于浮点值的工作方式,大于 17 的值不会提供任何额外的精度。
string.binary : <布尔值> (假)
当设置为true
时,任何无效 UTF-8 的字符串都将以 Base 64 进行编码,并使用base64_decode()
调用进行包装。
string.escape : <布尔值> (true)
当设置为true
时,所有包含 32-126 ASCII 范围之外的字节的字符串都将用双引号写入,并且该范围之外的字符将被转义。
string.utf8 :<布尔值>(假)
当此选项和string.escape
都设置为true
时,字符串中的所有有效多字节 UTF-8 字符都使用 PHP7 unicode 代码点语法进行编码。请注意,此语法在 7.0 之前的 PHP 版本中不起作用。
string.classes : <字符串[]> ([])
定义类的列表或类的类命名空间前缀,当在字符串中遇到这些类时,可以使用类解析运算符::class
对其进行编码。例如,提供值['Riimu\']
将对所有看起来像Riimu
命名空间中的类名的字符串进行编码,例如RiimuKitPHPEncoder::class
。
string.imports : <字符串[]> ([])
生成的代码文件中使用的导入列表,允许使用较短的格式编写类名。该列表应该是一个关联数组,其中名称空间或类作为键,使用的名称作为值。使用空字符串来指示当前名称空间。
例如,如果生成的文件具有namespace RiimuKitPHPEncoder;
并use PHPUnitFrameworkTestCase;
,您可以将数组设置为['Riimu\Kit\PHPEncoder\' => '', 'PHPUnit\Framework\TestCase' => 'TestCase']
array.short : <布尔值> (true)
当设置为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)
当设置为true
时,将不包含任何冗余数组键(例如数组[0 => 'a', 1 => 'b']
将被编码为['a', 'b']
)。
array.eol : <字符串|假> (假)
数组输出使用的行结束符。当设置为false
时,将使用默认的PHP_EOL
。
对象.方法:<布尔值>(true)
当设置为true
时,将检查任何编码对象的toPHP()
和toPHPValue()
方法。如果toPHP()
方法存在,则返回的字符串将用作对象的 PHP 代码表示形式。如果存在toPHPValue()
方法,则返回值将被编码为 PHP 并用作对象的代码表示。
object.format : <string> ('vars')
默认对象编码格式。可能的值为:
string
将对象转换为字符串,然后将该字符串编码为 PHP。serialize
序列化对象并用unserialize()
包装它export
模仿var_export()
对象表示array
将对象转换为数组并对该数组进行编码vars
使用get_object_vars()
将对象转换为数组iterate
通过使用foreach
迭代将对象转换为数组object.cast : <布尔值> (true)
使用对象编码格式vars
、 array
或iterate
时是否在从对象生成的数组前面添加(object)
强制转换。
递归.检测:<布尔值>(真)
当设置为true
时,编码器将尝试检测数组和对象中的循环引用以避免无限循环。
递归.忽略:<布尔值>(假)
当设置为true
时,任何循环引用都将替换为null
而不是引发异常。
recursion.max : <整数|假> (假)
编码数组和对象时的最大级别数。当超过最大值时抛出异常。设置为false
则没有限制。
该库版权所有 (c) 2013-2022 Riikka Kalliomäki。
有关许可证和复制信息,请参阅许可证。