eden-tech-labs / json-2-php-class
从 JSON 字符串或对象创建本地类对象
1.0.3
2021-04-12 12:41 UTC
This package is auto-updated.
Last update: 2024-09-12 20:32:02 UTC
README
从 JSON 字符串或对象创建本地类对象 json-2-php-class 是一个将 JSON 对象转换为本地类的库。
需求
- PHP 7.2 及以上版本。(应进行检查!)
安装
1. 使用 Composer
您可以通过 Composer 安装此库。如果您还没有安装 Composer,请首先从 这里 安装它。
安装 composer 后,然后运行以下命令安装 json-2-php-class 库
composer require eden-tech-labs/json-2-php-class
2. 手动
警告:您必须 require
使用过的类或创建一个自动加载函数来执行此操作。
如果您不使用 Composer,您也可以将 eden-tech-labs/json-2-php-class
仓库克隆到您项目目录中的一个目录
git clone https://github.com/eden-tech-labs/json-2-php-class
但是,推荐使用 Composer,因为您可以轻松地保持库更新并处理自动加载。
使用方法
安装 json-2-php-class
库后,在您的类中,您应该实现 interface
并使用符合 interface
要求的 trait。之后,您应该重写 _mapping()
方法。您可以在下面的实现和文档中进行检查。您可以在类中或在 PHPDoc
中定义您的属性,如示例所示。定义了属性规则后,您可以导出 PHPDoc
。以下是一个示例。(待添加链接)
示例类
use DateTime;
use EdenTechLabs\JSON2PHPClass\MadeFromDataContract;
use EdenTechLabs\JSON2PHPClass\MadeFromJson;
use EdenTechLabs\Common\Enum;
/**
* Class MyApp\SampleClass
* @property string applicationId
* @property SampleKind kind
* @property DateTime purchaseTime
* @property object developerPayload
* @property int quantity
* @property bool acknowledged
* @property SamplePayload samplePayload
*/
class SampleClass implements MadeFromDataContract
{
use MadeFromJson;
protected static function _mapping(): array
{
return [
'applicationId' => 'string',
'kind' => SampleKind::class,
'purchaseTime' => 'milliseconds',
'developerPayload' => 'json',
'quantity' => 'int',
'acknowledged' => 'bool',
'samplePayload' => SamplePayload::class,
];
}
}
/**
* Class MyApp\SamplePayload
* @property string stupidId
* @property bool autoRenewing
* @property \DateTime purchaseTime
*/
class SamplePayload implements MadeFromDataContract
{
use MadeFromJson;
protected static function _mapping() : array {
return [
'stupidId' => 'string',
'autoRenewing' => 'bool',
'purchaseTime' => 'seconds'
];
}
}
class SampleKind extends Enum
{
const KIND_ZERO = '0';
const KIND_ONE = '1';
const KIND_TWO = '2';
const KIND_TREE = '3';
}
示例使用
$json = '
{
"applicationId": "app-id-1",
"kind": 2,
"purchaseTime": "1584805754123",
"developerPayload": "{\"foo\":\"bar\"}",
"quantity": 34,
"acknowledged": true,
"samplePayload": {
"stupidId": "foo-bar-45",
"autoRenewing": false,
"purchaseTime": 1584805754
}
}
';
$myClass = SampleClass::make($json);
var_dump($myClass);
输出
object(SampleClass)#1 (7) {
["applicationId"]=>
string(8) "app-id-1"
["kind"]=>
object(SampleKind)#3 (1) {
["value":protected]=>
int(2)
}
["purchaseTime"]=>
object(DateTime)#4 (3) {
["date"]=>
string(26) "2020-03-21 15:49:14.000000"
["timezone_type"]=>
int(1)
["timezone"]=>
string(6) "+00:00"
}
["developerPayload"]=>
object(stdClass)#5 (1) {
["foo"]=>
string(3) "bar"
}
["quantity"]=>
int(34)
["acknowledged"]=>
bool(true)
["samplePayload"]=>
object(SamplePayload)#6 (3) {
["stupidId"]=>
string(10) "foo-bar-45"
["autoRenewing"]=>
bool(false)
["purchaseTime"]=>
object(DateTime)#7 (3) {
["date"]=>
string(26) "2020-03-21 15:49:14.000000"
["timezone_type"]=>
int(1)
["timezone"]=>
string(6) "+00:00"
}
}
}
作为 mapping
属性,您可以定义以下类型
int
整数string
字符串float
有小数部分的任何数字bool
布尔值milliseconds
由字符串或包含以毫秒为单位的戳记的整数生成的 PHP DateTime 对象seconds
由字符串或包含以秒为单位的戳记的整数生成的 PHP DateTime 对象json
通过json_decode
生成的标准 PHP 对象unknown
值被分配给属性,而不进行任何转换。AnyClass::class
- 如果实现
implements MadeFromDataContract
,则使用make
函数创建对象 - 其他任何类将通过
__construct
创建,传递的value
作为第一个和唯一的参数。
- 如果实现
Closure
待定义。
PHPDoc
示例
echo SampleClass::generatePHPDoc();
输出
/**
* Class SampleClass
* @property string applicationId
* @property \SampleKind kind
* @property \DateTime purchaseTime
* @property object developerPayload
* @property int quantity
* @property bool acknowledged
* @property \SamplePayload samplePayload
*/