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()
เป็นเพียงตัวเลือกชั่วคราวเท่านั้น และไม่สามารถใช้กับการโทรต่อไปนี้
ช่องว่าง : <boolean> (จริง)
เมื่อตั้งค่าเป็น false
การสร้างช่องว่างเพิ่มเติมทั้งหมดจะถูกปิดใช้งาน และการตั้งค่าอื่นๆ ทั้งหมดที่ส่งผลต่อช่องว่างจะถูกละเว้น
hex.capitalize : <boolean> (เท็จ)
เมื่อตั้งค่าเป็น true
อักขระเลขฐานสิบหกทั้งหมดในเอาต์พุตจะถูกเขียนโดยใช้ตัวพิมพ์ใหญ่แทนตัวพิมพ์เล็ก
null.capitalize : <boolean> (เท็จ)
เมื่อตั้งค่าเป็น true
ค่า null
ทั้งหมดจะถูกเขียนเป็นตัวพิมพ์ใหญ่แทนที่จะเป็นตัวพิมพ์เล็ก
boolean.capitalize : <boolean> (เท็จ)
เมื่อตั้งค่าเป็น true
ค่า true
และ false
ทั้งหมดจะถูกเขียนเป็นตัวพิมพ์ใหญ่แทนที่จะเป็นตัวพิมพ์เล็ก
integer.type : <"binary"|"octal"|"decimal"|"hexadecimal"> ("ทศนิยม")
เปลี่ยนไวยากรณ์ผลลัพธ์ของจำนวนเต็ม ตัวอย่างเช่น การใช้ประเภท "hexadecimal"
จะทำให้เอาต์พุตตัวเลข 15
เป็น 0xf
float.integers : <boolean|"all"> (เท็จ)
เมื่อตั้งค่าเป็น true
จำนวนทศนิยมใดๆ ที่แสดงถึงจำนวนเต็มและมีค่าที่แสดงด้วยจำนวนจุดลอยตัวอย่างถูกต้อง จะถูกเข้ารหัสเป็นจำนวนเต็มแทนที่จะเป็นจำนวนทศนิยม (เช่นค่า 2.0
จะถูกเข้ารหัสเป็น 2
) หากต้องการรวมค่าที่ไม่ได้แสดงอย่างถูกต้อง คุณอาจตั้งค่าตัวเลือกเป็น "all"
float.export : <boolean> (เท็จ)
เมื่อตั้งค่าเป็นทศนิยม true
จะถูกเข้ารหัสโดยใช้ var_export()
ซึ่งทำให้เอาต์พุตแตกต่างออกไปเล็กน้อยกับตัวเลขทศนิยมที่ไม่ใช่จำนวนเต็มเมื่อเปรียบเทียบกับวิธีการมาตรฐานที่นำมาใช้ ในบางกรณี สิ่งนี้อาจให้ตัวเลขที่แม่นยำยิ่งขึ้นแต่มีการแสดงที่สะอาดตาน้อยลง
float.precision : <จำนวนเต็ม|false> (17)
ความแม่นยำสูงสุดของค่าจุดลอยตัวที่เข้ารหัส ซึ่งโดยปกติจะหมายถึงจำนวนหลักสูงสุดในการลอยตัวที่เข้ารหัสด้วย หากตั้งค่าเป็น false
การตั้งค่า PHP ini serialize_precision
จะถูกนำมาใช้แทน โปรดทราบว่าเนื่องจากวิธีการทำงานของค่าจุดลอยตัว ค่าที่มากกว่า 17 ไม่ได้ให้ความแม่นยำเพิ่มเติมใดๆ
string.binary : <boolean> (เท็จ)
เมื่อตั้งค่าเป็น true
สตริงใดๆ ที่ไม่ถูกต้อง UTF-8 จะถูกเข้ารหัสในฐาน 64 และรวมด้วยการเรียก base64_decode()
string.escape : <boolean> (จริง)
เมื่อตั้งค่าเป็น true
สตริงทั้งหมดที่มีไบต์ที่อยู่นอกช่วง 32-126 ASCII จะถูกเขียนด้วยเครื่องหมายคำพูดคู่ และอักขระที่อยู่นอกช่วงจะถูกหลีก
string.utf8 : <boolean> (เท็จ)
เมื่อตั้งค่าทั้งตัวเลือกนี้และ 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 : <boolean> (จริง)
เมื่อตั้งค่าเป็น 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 : <string|false> (เท็จ)
อักขระท้ายบรรทัดที่ใช้โดยเอาต์พุตอาร์เรย์ เมื่อตั้งค่าเป็น false
ระบบจะใช้ PHP_EOL
เริ่มต้นแทน
object.method : <boolean> (จริง)
เมื่อตั้งค่าเป็น true
ออบเจ็กต์ที่เข้ารหัสใดๆ จะถูกตรวจสอบหาเมธอด toPHP()
และ toPHPValue()
หากมีวิธี toPHP()
อยู่ สตริงที่ส่งคืนจะถูกใช้เป็นตัวแทนโค้ด PHP ของออบเจ็กต์ หากมีเมธอด toPHPValue()
แทน ค่าที่ส่งคืนจะถูกเข้ารหัสเป็น PHP และใช้เป็นตัวแทนโค้ดของออบเจ็กต์
object.format : <string> ('vars')
รูปแบบการเข้ารหัสออบเจ็กต์เริ่มต้น ค่าที่เป็นไปได้คือ:
string
ร่ายวัตถุเป็นสตริงแล้วเข้ารหัสสตริงนั้นเป็น PHPserialize
ทำให้วัตถุเป็นอนุกรมและล้อมด้วย unserialize()
export
เลียนแบบการแสดงวัตถุ var_export()
array
จะแปลงวัตถุไปยังอาร์เรย์และเข้ารหัสอาร์เรย์นั้นvars
เปลี่ยนวัตถุให้เป็นอาร์เรย์โดยใช้ get_object_vars()
iterate
เปลี่ยนวัตถุให้เป็นอาร์เรย์โดยการวนซ้ำด้วย foreach
object.cast : <boolean> (จริง)
ไม่ว่าจะเพิ่ม (object)
คาสต์หน้าอาร์เรย์ที่สร้างจากอ็อบเจ็กต์หรือไม่ เมื่อใช้รูปแบบการเข้ารหัสอ็อบเจ็กต์ vars
, array
หรือ iterate
recursion.detect : <boolean> (จริง)
เมื่อตั้งค่าเป็น true
ตัวเข้ารหัสจะพยายามตรวจจับการอ้างอิงแบบวงกลมในอาร์เรย์และออบเจ็กต์เพื่อหลีกเลี่ยงการวนซ้ำไม่สิ้นสุด
recursion.ignore : <บูลีน> (เท็จ)
เมื่อตั้งค่าเป็น true
การอ้างอิงแบบวงกลมจะถูกแทนที่ด้วย null
แทนที่จะส่งข้อยกเว้น
recursion.max : <จำนวนเต็ม|false> (เท็จ)
จำนวนระดับสูงสุดเมื่อเข้ารหัสอาร์เรย์และอ็อบเจ็กต์ ข้อยกเว้นจะเกิดขึ้นเมื่อเกินค่าสูงสุด ตั้งค่าเป็น false
เพื่อให้ไม่มีขีดจำกัด
ห้องสมุดนี้เป็นลิขสิทธิ์ (c) 2013-2022 Riikka Kalliomäki
ดูใบอนุญาตสำหรับข้อมูลใบอนุญาตและการคัดลอก