PHPEncoder é uma biblioteca PHP para exportar variáveis e gerar representações de código PHP para essas variáveis, semelhantes à função integrada var_export()
. Em comparação com a função integrada, no entanto, esta biblioteca oferece mais opções para personalizar a saída, o que facilita a geração de código para diferentes tipos de finalidades, como arquivos de configuração legíveis ou arquivos de cache otimizados.
O objetivo desta biblioteca é resolver algumas das deficiências do var_export()
integrado. Por exemplo, não há como controlar a quantidade de espaços em branco na saída e não há como escolher entre diferentes notações de array. Esta biblioteca também fornece funcionalidade para converter objetos em código PHP que é realmente útil quando comparado à função integrada.
O grande número de opções de personalização nesta biblioteca permite criar código que atenda aos seus propósitos. Você pode criar código muito compacto, quando precisar limitar o tamanho da saída, ou pode criar código no estilo que realmente se ajusta a qualquer um dos seus arquivos PHP gerados dinamicamente.
A documentação da API está disponível em: http://kit.riimu.net/api/phpencoder/
A maneira mais fácil de instalar esta biblioteca é usar o Composer para lidar com suas dependências. Para instalar esta biblioteca via Composer, basta seguir estes dois passos:
Adquira o composer.phar
executando a instalação da linha de comando do Composer na raiz do seu projeto.
Depois de executar o script de instalação, você deverá ter o arquivo composer.phar
na raiz do projeto e poderá executar o seguinte comando:
php composer.phar require "riimu/kit-phpencoder:^2.3"
Após instalar esta biblioteca via Composer, você pode carregá-la incluindo o arquivo vendor/autoload.php
que foi gerado pelo Composer durante a instalação.
Se você já está familiarizado com o uso do Composer, você pode alternativamente adicionar a biblioteca como uma dependência adicionando o seguinte arquivo composer.json
ao seu projeto e executando o comando composer install
:
{
"require" : {
"riimu/kit-phpencoder" : " ^2.3 "
}
}
Se não desejar usar o Composer para carregar a biblioteca, você também pode fazer o download da biblioteca manualmente, baixando a versão mais recente e extraindo a pasta src
para o seu projeto. Você pode então incluir o arquivo src/autoload.php
fornecido para carregar as classes da biblioteca.
O método mais relevante fornecido por esta biblioteca é o método encode()
fornecido por PHPEncoder
. O método aceita qualquer valor como argumento e retorna a representação do código PHP para esse valor.
Por exemplo:
<?php
require ' vendor/autoload.php ' ;
$ encoder = new Riimu Kit PHPEncoder PHPEncoder ();
echo $ encoder -> encode ([ ' foo ' => ' bar ' , [ 1 , true , false , null , 1.0 ]]);
Isso criaria a seguinte saída:
[
'foo' => 'bar',
[1, true, false, null, 1.0],
]
Claro, o recurso mais importante desta biblioteca é a capacidade de personalizar o código PHP criado. Como segundo argumento, o método encode()
usa um conjunto de opções, que podem ser usadas para personalizar o código PHP retornado. Por exemplo:
<?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 ,
]);
Isso criaria a seguinte saída:
[
'foo' => 'bar',
0 => [
0 => 1,
1 => TRUE,
2 => FALSE,
3 => NULL,
4 => 1.0,
],
]
As opções de codificação permitem personalizar a saída do método encode()
. É possível definir estas opções de três maneiras diferentes:
PHPEncoder
.setOption()
.encode()
. Observe que as opções passadas para o método encode()
são apenas temporárias e não se aplicam às chamadas seguintes.
espaço em branco : <boolean> (verdadeiro)
Quando definido como false
, a geração de todos os espaços em branco extras é desativada e todas as outras configurações que afetam os espaços em branco são ignoradas.
hex.capitalize : <boolean> (falso)
Quando definido como true
, todos os caracteres hexadecimais na saída são escritos em maiúsculas em vez de minúsculas.
null.capitalize : <boolean> (falso)
Quando definido como true
, todos os valores null
são escritos em letras maiúsculas em vez de minúsculas.
boolean.capitalize : <boolean> (falso)
Quando definido como true
, todos os valores true
e false
são escritos em letras maiúsculas em vez de minúsculas.
inteiro.type : <"binário"|"octal"|"decimal"|"hexadecimal"> ("decimal")
Altere a sintaxe de saída de números inteiros. Por exemplo, usar o tipo "hexadecimal"
geraria o número 15
como 0xf
.
float.integers : <boolean|"all"> (falso)
Quando definido como true
, qualquer ponto flutuante que represente um número inteiro e tenha um valor representado com precisão pelo número de ponto flutuante será codificado como um número inteiro em vez de um número flutuante. (por exemplo, o valor 2.0
será codificado como 2
). Para incluir os valores que não são representados com precisão, você pode definir a opção como "all"
.
float.export : <boolean> (falso)
Quando definido como true
os pontos flutuantes são codificados usando var_export()
, o que causa uma saída ligeiramente diferente em números de ponto flutuante não inteiros em comparação com o método padrão implementado. Em alguns casos, isto pode produzir números mais precisos, mas com uma representação menos limpa.
float.precision : <inteiro|falso> (17)
A precisão máxima dos valores de ponto flutuante codificados, que geralmente também significa o número máximo de dígitos em pontos flutuantes codificados. Se o valor for definido como false
, a configuração serialize_precision
do PHP ini será usada. Observe que devido à forma como os valores de ponto flutuante funcionam, um valor maior que 17 não fornece nenhuma precisão adicional.
string.binary : <booleano> (falso)
Quando definido como true
qualquer string que não seja UTF-8 válida será codificada na base 64 e encapsulada com a chamada base64_decode()
.
string.escape : <booleano> (verdadeiro)
Quando definido como true
, todas as strings contendo bytes fora do intervalo 32-126 ASCII serão escritas entre aspas duplas e os caracteres fora do intervalo serão escapados.
string.utf8 : <booleano> (falso)
Quando esta opção e string.escape
são definidas como true
, todos os caracteres UTF-8 multibyte válidos em strings são codificados usando a sintaxe de ponto de código unicode do PHP7. Observe que esta sintaxe não funciona em versões do PHP anteriores à 7.0.
string.classes : <string[]> ([])
Define uma lista de classes ou prefixos de namespace de classe para classes que podem ser codificadas usando o operador de resolução de classe ::class
quando encontradas em strings. por exemplo, fornecer o valor ['Riimu\']
codificaria todas as strings que se parecem com nomes de classes no namespace Riimu
como RiimuKitPHPEncoder::class
.
string.importações : <string[]> ([])
Lista de importações usadas no arquivo de código resultante, que permite que nomes de classes sejam escritos em um formato mais curto. A lista deve ser uma matriz associativa com o namespace ou classe como chave e o nome usado como valor. Use uma string vazia para indicar o namespace atual.
Por exemplo, se o arquivo resultante tiver namespace RiimuKitPHPEncoder;
e use PHPUnitFrameworkTestCase;
, você pode configurar o array como ['Riimu\Kit\PHPEncoder\' => '', 'PHPUnit\Framework\TestCase' => 'TestCase']
array.short : <boolean> (verdadeiro)
Quando definido como true
, as matrizes são colocadas entre colchetes []
em vez da notação de matriz longa array()
.
array.base : <inteiro|string> (0)
Recuo base para matrizes como um número de espaços ou como uma string. Fornece conveniência quando você precisa gerar código para um arquivo com nível específico de recuo.
array.indent : <inteiro|string> (4)
Quantidade de recuo para um único nível de recuo como um número de espaços ou uma string.
array.align : <booleano> (falso)
Quando definido como true
, os operadores de atribuição de array =>
são alinhados à mesma coluna usando espaços. Mesmo se habilitadas, as opções array.omit
e array.inline
ainda serão respeitadas, mas somente se todas as chaves no array específico puderem ser omitidas.
array.inline : <boolean|inteiro> (70)
Quando definido como true
, qualquer array que possa ser escrito sem nenhuma chave de array será escrito em uma única linha. Se um número inteiro for fornecido, a matriz será escrita como uma única linha somente se não exceder esse número de caracteres. Esta opção não tem efeito quando array.omit
é definido como falso.
array.omit : <boolean> (verdadeiro)
Quando definido como true
, quaisquer chaves redundantes do array não serão incluídas (por exemplo, o array [0 => 'a', 1 => 'b']
seria codificado exatamente como ['a', 'b']
).
array.eol : <string|falso> (falso)
O caractere de fim de linha usado pela saída da matriz. Quando definido como false
, o PHP_EOL
padrão será usado.
object.method : <boolean> (verdadeiro)
Quando definido como true
, qualquer objeto codificado será verificado quanto aos métodos toPHP()
e toPHPValue()
. Se o método toPHP()
existir, a string retornada será usada como representação do código PHP do objeto. Se o método toPHPValue()
existir, o valor retornado será codificado como PHP e usado como representação de código do objeto.
objeto.formato : <string> ('vars')
Formato de codificação de objeto padrão. Os valores possíveis são:
string
converte o objeto em string e então codifica essa string como PHP.serialize
serializa o objeto e o envolve com unserialize()
export
imita a representação do objeto var_export()
array
converte o objeto em um array e codifica esse arrayvars
transforma objeto em um array usando get_object_vars()
iterate
transforma o objeto em um array iterando sobre ele com foreach
object.cast : <booleano> (verdadeiro)
Se deve ser adicionado um (object)
convertido na frente de arrays gerados a partir de objetos ou não ao usar os formatos de codificação de objetos vars
, array
ou iterate
.
recursion.detect : <boolean> (verdadeiro)
Quando definido como true
, o codificador tentará detectar referências circulares em matrizes e objetos para evitar loops infinitos.
recursion.ignore : <boolean> (falso)
Quando definido como true
, qualquer referência circular será substituída por null
em vez de lançar uma exceção.
recursion.max : <inteiro|falso> (falso)
Número máximo de níveis ao codificar matrizes e objetos. A exceção é lançada quando o máximo é excedido. Defina como false
para não ter limite.
Esta biblioteca tem Copyright (c) 2013-2022 Riikka Kalliomäki.
Consulte LICENÇA para obter informações sobre licença e cópia.