Я знаю, что заголовок может быть действительно похож на другие существующие вопросы, но реальная проблема действительно отличается от существующих (по крайней мере, я не могу найти другой похожий).
У меня естьAPI, с которым мне нужно связаться, чтобы создать клиента, в полях для создания нового клиента есть поле Address
, и да, поле требует заглавных букв A
.Но что все это значит?
Я думал о создании сущностей с открытым методом, чтобы я мог преобразовать их в массив и сгенерировать полезную нагрузку для отправки, что-то вроде этого:
class Customer extends Entity
{
public $name;
public $email;
public $phone;
public $address;
}
Эта сущность будетбыть легко преобразованным в массив, просто используя (array)
или даже get_object_vars
, реальная проблема здесь в том, что я хочу, чтобы $address
был экземпляром другой сущности с именем Address
, например:
class Address extends Entity
{
public $street;
public $number;
public $city;
public $state;
}
Для этого я реализовал один метод с именем properties
, например:
abstract class Entity {
public function properties(): array
{
$convert = function($value) use(&$convert)
{
return is_scalar($value) ? $value : array_map($convert, (array) $value);
};
return $convert($this);
}
}
Работает, рекурсивно преобразуется.
Проблема здесь в следующем: вместо Address
в качестве ключа он возвращает address
в нижнем регистре (очевидно), потому что он только получает поля.
Мне было интересно, как я могу это сделать?Как я могу установить ключ с первой заглавной буквой, если поле объекта - это объект (другой объект)?
Ожидаемый результат будет примерно таким:
[
'name' => '...'
'email' => '...'
'phone' => '...'
'Address' => [
'street' => '...'
'number' => '...'
'city' => '...'
'state' => '...'
]
]
Спасибов продвинутом.