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

$ответ->SendOrderResult

В то время как другой отвечает с

$ответ->GetOrdersStateResult

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

0
Simon Stevens 5 Фев 2010 в 13:27
Очень странно, я такого еще не видел.
 – 
Sarfraz
5 Фев 2010 в 13:33

2 ответа

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

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";
}
0
Sarfraz 5 Фев 2010 в 13:35

Вы можете написать небольшую функцию для этого (при условии, что $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
Dan Soap 5 Фев 2010 в 13:37