bluem / javascript-serializer
将PHP数据序列化为JavaScript表示的无依赖序列化
Requires
- php: >=7.0.0
Requires (Dev)
- phpunit/phpunit: ^6.0
This package is auto-updated.
Last update: 2022-02-07 20:31:16 UTC
README
概述
此库提供了一种简单、无依赖的序列化PHP变量值/数据结构到字符串的方法,这些字符串可以解释为JavaScript值。
最典型的用例将是自动生成JavaScript代码,在这种情况下,数据量明显增加,因此序列化为JSON将遭受反序列化罚金以及/或JSON数据的大小。
虽然我原本期望在packagist.org上已经有一些类似的库,但我没有找到任何不是绑定到特定用例、数据集或框架的库。如果有什么遗漏,请随时联系我。
安装
将"bluem/javascript-serializer": "^1.0"
添加到你的composer.json
文件中的要求,或者在命令行中运行composer require "bluem/javascript-serializer"
。
由于此库使用语义版本控制,当你运行composer update
时,你会获得修复和功能添加,但不会破坏API的更改。
用法
实例化类,用任何变量调用serialize()
方法,并使用返回类型。就是这样。
$jss = new \BlueM\JavaScriptSerializer();
$result = $jss->serialize($myVariable);
以下数据类型可以处理
null
字符串
浮点数
整数
数组
\DateTime
(转换为JavaScriptDate
构造函数调用)对象
– 如果对象实现了\JsonSerializable
接口,有一个公共的toArray
方法或有一个公共的__toString
方法。(所述顺序正是代码执行检查的顺序。)
示例
示例 1:标量PHP值
输入PHP数据
$var = 'Hello world';
$serializer->serialize($var)
调用返回的字符串将是这个
'Hello world'
示例 2:具有数字键的数组
输入PHP数据
$var = ['A', 'B', 3.14, 4711];
$serializer->serialize($var)
调用返回的字符串将是这个
['A', 'B', 3.14, 4711]
示例 3:嵌套数组
输入PHP数据
[
'foo' => 'bar',
'nested' => [
'pi' => 3.14,
'key' => null,
'abc' => "String \" with 'quotes'",
'My key' => 'Hello world',
'bar' => [
'key' => 'A',
'code' => 65,
],
]
]
$serializer->serialize($var)
调用返回的字符串将是这个
{foo: 'bar', nested: {pi: 3.14, key: null, abc: 'String " with \'quotes\'', 'My key': 'Hello world', bar: {key: 'A', code: 65}}}
已知问题
- 当创建对象属性时,可以不使用引号作为属性使用的字符串将原样插入,不使用引号。然而,这个决定是基于一个非常简单的正则表达式,它不仅忽略了ECMAScript 2015 Symbols的存在,而且还忽略了可以不使用引号使用的其他属性名。这不会影响在JavaScript中使用代码,但只会影响代码大小。但是,你可能会使用某种形式的压缩,所以这应该不会是问题。
待办事项
- 除了当前的紧凑格式外,还应可选择“美化打印”格式。
版本历史
1.1, 2019-03-28
- 原生PHP
\DateTime
实例被转换为原生JavaScriptDate
构造函数调用
1.0.1, 2017-10-14
- 当对象不可序列化时,改进异常消息(明确提及类名)。
- 改进文档注释和README。
1.0, 2017-05-04
- 第一个公开版本。没有其他要说的话。
作者 & 许可证
此代码由Carsten Blüm编写(www.bluem.net),并许可在BSD 2-Clause许可证下使用。