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 Kalliomaki。
有關許可證和複製信息,請參閱許可證。