wearelaradev/serializable

序列化特性

dev-main 2024-04-11 18:32 UTC

This package is not auto-updated.

Last update: 2024-09-17 18:09:43 UTC


README

此 PHP 包实现了序列化功能。名为 "Serializable" 的序列化特性允许您将任何 PHP 对象序列化为数组或 JSON。它还使实现此特性的任何对象能够成为它自己的序列化器。

入门

    composer require wearelaradev/serializable

用法

属性必须是公共的或具有关联的获取器才能进行序列化。

基本用法

use Laraved\Serializable\Serializable;

class MyObject 
{
    use Serializable;
    
    public string $foo = "foo";
    public string $bar = "bar";
}

var_dump((new MyObject())->toArray());
// output
// ["foo" => "foo", "bar" => "bar"]

var_dump((new MyObject())->toJson());
// output
// "{"foo": "foo", "bar": "bar"}"

与获取器一起使用

use Laradev\Serializable\Serializable;

class MyObject 
{
    use Serializable;
    
    private string $foo = "foo";
    protected string $bar = "bar";
    
    public function getFoo(): string 
    {
        return $this->foo;
    }
}

var_dump((new MyObject())->toArray());
// output
// ["foo" => "foo"]

var_dump((new MyObject())->toJson());
// output
// "{"foo": "foo"}"

与白名单和黑名单策略一起使用

您可以使用属性或函数应用白名单或黑名单策略到序列化属性。

使用属性

白名单
use Laradev\Serializable\Serializable;

class MyObject 
{
    use Serializable;
    
    private array $whitelist = [
        "foo"
    ];
    
    public string $foo = "foo";
    public string $bar = "bar";
}
var_dump((new MyObject())->toArray());
// output
// ["foo" => "foo"]

var_dump((new MyObject())->toJson());
// output
// "{"foo": "foo"}"
黑名单
use Laradev\Serializable\Serializable;

class MyObject 
{
    use Serializable;
    
    private array $blacklist = [
        "foo"
    ];
    
    public string $foo = "foo";
    public string $bar = "bar";
}
var_dump((new MyObject())->toArray());
// output
// ["bar" => "bar"]

var_dump((new MyObject())->toJson());
// output
// "{"bar": "bar"}"

使用函数

白名单
use Laradev\Serializable\Serializable;

class MyObject 
{
    use Serializable;
    
    public string $foo = "foo";
    public string $bar = "bar";
    
    protected function whitelist(): array 
    {
        // your logic
        return [
            "foo"
        ];
    }
}
var_dump((new MyObject())->toArray());
// output
// ["foo" => "foo"]

var_dump((new MyObject())->toJson());
// output
// "{"foo": "foo"}"
黑名单
use Laradev\Serializable\Serializable;

class MyObject 
{
    use Serializable;
    
    public string $foo = "foo";
    public string $bar = "bar";
    
    protected function blacklist(): array 
    {
        // your logic
        return [
            "foo"
        ];
    }
}
var_dump((new MyObject())->toArray());
// output
// ["bar" => "bar"]

var_dump((new MyObject())->toJson());
// output
// "{"bar": "bar"}"

其他信息

如果您遇到错误或对改进有任何想法,请随时发送 PR 或通过电子邮件联系我 florian@laradev.ca :)