让我们说我有一个包含许多属性的类的实例。此类无法修改或扩展。
我现在需要将此实例中的一些数据传递给函数。该函数只需要一些这些属性,它不能直接使用类的实例(它需要一个关联数组),并且还需要一些实例中不存在的数据。所以我需要将实例转换为关联数组。
例如我需要转换它:
class Person {
public $id = 123;
public $firstName = "John";
public $lastName = "Something";
public $address;
public $city;
public $zipCode;
// etc.
}
到此:
array(
'id' => 123,
'name' => 'John Something'
);
我的问题是:是否有任何已知的OOP模式来处理这种转换?我知道我可以编写一个简单的函数来从一种格式转换为另一种格式,但我想知道什么是"正确的"如果可能的话,基本上使用已知的模式。
答案 0 :(得分:1)
当您要求设计模式时,Adapter Pattern可能是最合适的
在您的示例中,Person将是Adaptee,您的Adapter将扩展Array-Class并覆盖访问方法。适配器的实现可能会有所不同,因为您仍然需要决定是否要明确访问适配器字段,或者您希望封装通用访问(例如,使用反射)。
请注意,此解决方案并非真正“转换”为独立阵列,因为数据仍然在您的Person实例中得到支持,这可能会影响您的要求:
答案 1 :(得分:0)
你可以,快速而又脏,尝试强制转换为数组:
class Person {
public $id = 123;
public $firstName = "John";
public $lastName = "Something";
public $address;
public $city;
public $zipCode;
// etc.
}
$person = new Person;
var_dump( (array)$person);
输出:
array(6) {
["id"]=>
int(123)
["firstName"]=>
string(4) "John"
["lastName"]=>
string(9) "Something"
["address"]=>
NULL
["city"]=>
NULL
["zipCode"]=>
NULL
}