@lexstile

Почему примитив превращается в объект?

Приходят данные:
print_r($obj);

SimpleXMLElement Object
(
    [id] => 1082930
    [state] => REGISTERED
)

Мне нужно взять id из $obj и сделать новый запрос с параметрами:
$params = [
		'sector' => SECTOR_ID,
		'id' => $obj->id,
		'client_ref' => $user->client_ref,
	];

Делаю:
print_r($params);

Array
(
    [sector] => 2721
    [id] => SimpleXMLElement Object
        (
            [0] => 1082930
        )

    [client_ref] => test
)

Делаю:
echo $obj->id;

# результат
1082930

Почему в первом случае у меня получается объект?
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
TNPTSYWWCC
@TNPTSYWWCC
And I Told Them I Invented Times New Roman
Очевидно какие-то магические методы в коробке SimpleXMLElement, что не видно при его вардампе.
Скорее всего при простом echo там отрабатывает какой-то кастомный toString (или что-то в том же роде для инта, я уже не помню PHP особо), который отдает нормальное значение.

Попробуй явно указать тип: 'id' => (string) $obj->id. или 'id' => (int) $obj->id (скорее всего оба сработают), ну или бери первый элемент массива руками. Но вообще, с высокой долей вероятности, если глянуть API SimpleXMLElement, то там и геттеры найдутся, возможно.

Даже если геттеров нет, в API можно увидеть использование возможных магических методов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы