bluem/javascript-serializer

此包已被废弃,不再维护。未建议替代包。

将PHP数据序列化为JavaScript表示的无依赖序列化

1.1 2019-03-28 07:02 UTC

This package is auto-updated.

Last update: 2022-02-07 20:31:16 UTC


README

Build Status SensioLabsInsight

概述

此库提供了一种简单、无依赖的序列化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(转换为JavaScript Date构造函数调用)
  • 对象 – 如果对象实现了\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实例被转换为原生JavaScript Date构造函数调用

1.0.1, 2017-10-14

  • 当对象不可序列化时,改进异常消息(明确提及类名)。
  • 改进文档注释和README。

1.0, 2017-05-04

  • 第一个公开版本。没有其他要说的话。

作者 & 许可证

此代码由Carsten Blüm编写(www.bluem.net),并许可在BSD 2-Clause许可证下使用。