Как ссылаться на атрибут объекта, не зная точного имени? - PullRequest
0 голосов
/ 05 февраля 2010

На самом деле я сейчас работаю с SOAP, и, к сожалению, имя ответа меняется в зависимости от метода, который я вызываю. Например, один метод ответит ..

$ response-> SendOrderResult

пока другой отвечает

$ response-> GetOrdersStateResult

Есть ли способ сослаться на значение, не зная имени? то есть что-то вроде $ response -> * Result

Ответы [ 2 ]

0 голосов
/ 05 февраля 2010

Вы можете написать небольшую функцию для этого (при условии, что $response имеет тип stdClass):

function extractResult($response) {
    foreach ($response as $attribute_name => $attribute_value) {
        if (strtolower(substr($attribute_name, -6)) == 'result')
            return $attribute_value;
    }
}

Вы можете позвонить по номеру

$result = extractResult($response);

Примечание. В некоторых случаях функция может не работать, т. Е. Если имя полученного атрибута не заканчивается на Result.

0 голосов
/ 05 февраля 2010

Нет, это невозможно, вы должны быть в состоянии выяснить, какой метод вызывать, проанализировав свой код и вызвав требуемый метод после слов:

if (this condition)
{
  $response->SendOrderResult();
}
else
{
  $response->GetOrdersStateResult();
}

Другая возможность - использовать функцию get_class_methods .

$class_methods = get_class_methods(new myclass());

foreach ($class_methods as $method_name)
{
    echo "$method_name\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...