Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 可以在类上创建静态工厂方法吗?_Php_Json_Oop_Methods_Factory - Fatal编程技术网

Php 可以在类上创建静态工厂方法吗?

Php 可以在类上创建静态工厂方法吗?,php,json,oop,methods,factory,Php,Json,Oop,Methods,Factory,我有一个类,其实例是以标准格式表示消息的对象。这些实例最终作为JSON对象输出,以便在进程之间传输 该类有一些非常有用的方法,我使用这些方法来验证和控制消息,而无需深入研究对象结构。当我创建消息并将其发送出去时,这是很好的,但是当我接收到JSON对象时,它只包含数据,而没有这些有用的方法 将这些传入的JSON对象映射到类实例的最佳方法是什么 我可以想出四种方法 1向类添加一个静态方法,该方法接受JSON字符串并生成该类的新实例。 2向类添加一个方法,该类接受JSON字符串并将JSON对象映射到该

我有一个类,其实例是以标准格式表示消息的对象。这些实例最终作为JSON对象输出,以便在进程之间传输

该类有一些非常有用的方法,我使用这些方法来验证和控制消息,而无需深入研究对象结构。当我创建消息并将其发送出去时,这是很好的,但是当我接收到JSON对象时,它只包含数据,而没有这些有用的方法

将这些传入的JSON对象映射到类实例的最佳方法是什么

我可以想出四种方法

1向类添加一个静态方法,该方法接受JSON字符串并生成该类的新实例。 2向类添加一个方法,该类接受JSON字符串并将JSON对象映射到该实例。 3在构造函数中有一个可选参数,该参数接受JSON字符串并将其映射到构造时的实例。 4使用工厂方法将类转换为服务

我很想做3,但问题是如果对象的格式不正确,我无法返回反馈,等等

1向类添加一个静态方法,该方法接受JSON字符串并生成该类的新实例

这将使代码更难进行单元测试,并随着特性的变化进行扩展。看

2向类添加一个方法,该类接受JSON字符串并将JSON对象映射到该实例

这是个好主意。这可能与4结合使用很有用。如果您想支持多个objects/JSON格式,单独实现这一点可能会变得单调乏味

3在构造函数中有一个可选参数,该参数接受JSON字符串并将其映射到构造时的实例

我个人认为这是一个笨拙的构造函数使用。JSON验证之类的东西需要抛出异常

4使用工厂方法将类转换为服务

创建工厂是最具扩展性的方法。如果要映射到多个JSON格式和对象,请仔细考虑。这个中心类允许您选择正确的映射并处理随时间的变化。单元测试也很容易