首页 > 解决方案 > 如何在 PHP 中读取此结果?

问题描述

如何使用 PHP 读取此结果?这是请求结果的 print_r:

object(PhpSigep\Services\Result)[687]
  protected 'isSoapFault' => boolean false
  protected 'errorCode' => null
  protected 'errorMsg' => null
  protected 'result' => 
    array (size=38)
      0 => 
        object(PhpSigep\Model\CalcPrecoPrazoResposta)[730]
          protected 'servico' => 
            object(PhpSigep\Model\ServicoDePostagem)[731]
              ...
          protected 'valor' => float 12.28
          protected 'prazoEntrega' => int 5
          protected 'valorMaoPropria' => float 0
          protected 'valorAvisoRecebimento' => float 0
          protected 'valorValorDeclarado' => float 0
          protected 'entregaDomiciliar' => boolean true
          protected 'entregaSabado' => boolean false
          protected 'erroCodigo' => int 0
          protected 'erroMsg' => null
          protected '_failIfAtributeNotExiste' => boolean true
      1 => 
        object(PhpSigep\Model\CalcPrecoPrazoResposta)[732]
          protected 'servico' => 
            object(PhpSigep\Model\ServicoDePostagem)[733]
              ...
          protected 'valor' => float 22.9
          protected 'prazoEntrega' => int 5
          protected 'valorMaoPropria' => float 0
          protected 'valorAvisoRecebimento' => float 0
          protected 'valorValorDeclarado' => float 0
          protected 'entregaDomiciliar' => boolean true
          protected 'entregaSabado' => boolean false
          protected 'erroCodigo' => int 0
          protected 'erroMsg' => null
          protected '_failIfAtributeNotExiste' => boolean true

我想读取数组,我正在尝试 $result->result、$result['result'] 和其他组合,但我真的没有设法读取它。有人能帮助我吗?

标签: php

解决方案


  • 首先,验证类定义中是否有像getResult()这样的公共方法。

  • 如果您无法修改类定义,请像这样使用反射:

代码示例:

function accessProtected($obj, $prop) {
  $reflection = new ReflectionClass($obj);
  $property = $reflection->getProperty($prop);
  $property->setAccessible(true);
  return $property->getValue($obj);
}

调用方法:

$data = accessProtected($result,"result");

要访问内部数据,请递归调用该函数。

如果你想获得勇气prazoEntrega

foreach($data as $CalcPrecoPrazoResposta){
    $valor = accessProtected($CalcPrecoPrazoResposta,"valor");
    $prazoEntrega = accessProtected($CalcPrecoPrazoResposta,"prazoEntrega");
  echo $valor;
  echo $prazoEntrega;
}

推荐阅读