Итерация по объекту PHP с помощью foreach (Stripe Customer) - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь перебрать метаданные, хранящиеся в объекте клиента Stripe.

Я могу посчитать количество предметов:

echo count($matchUser->data[0]->metadata);

Что дает мне «2», как и ожидалось.Но:

foreach($matchUser->data[0]->metadata as $key => $value) {
    echo $key;
    echo $value;
    echo "hello";
}

ничего не возвращает.

Переменная метаданных выглядит следующим образом:

object(Stripe\StripeObject)#67 (2) { ["testitem"]=> string(5) "hello" ["password_hash"]=> string(6) "myhash" }

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Я знаю, что этому вопросу пару месяцев, и на него уже есть принятый ответ.Я думаю, что есть лучший подход к этому, хотя.

Я думаю, что разработчики библиотеки PHP для API Stripe префикс некоторых методов с __ (двойное подчеркивание), чтобы указать, что метод является защищенным или закрытым, который являетсястарое соглашение со времен, когда видимость метода не была вещью в PHP.Теперь префикс __ зарезервирован для магических методов, как указано в PHP: магические методы - руководство :

PHP резервирует все имена функций, начинающиеся с __, как магические.

После более тщательного изучения класса StripeObject я думаю, что метод jsonSerialize, определенный ниже, является лучшим выбором.

public function jsonSerialize()
{
    return $this->__toArray(true);
}

Вы можете использоватьэто так:

$matchUserArray = $matchUser->jsonSerialize();

// Output "hello" 
echo $matchUserArray['data'][0]['metadata']['testitem']
0 голосов
/ 27 декабря 2018

Попробуйте метод

public function __toArray($recursive = false)
{
    if ($recursive) {
        return Util\Util::convertStripeObjectToArray($this->_values);
    } else {
        return $this->_values;
    }
}

следующим образом:

$matchArray = $matchUser->__toArray();

, чтобы глубже понять, какие методы доступны, пожалуйста, посмотрите на этот URL:

https://github.com/stripe/stripe-php/blob/master/lib/StripeObject.php

надеюсь, что это поможет

...