即使未设置值,也可以在PHP中获取SOAP响应

时间:2014-11-03 18:15:45

标签: php xml soap

我不经常使用PHP,至少不在这个级别,所以我需要一些帮助。我在PHP中有一个SOAP响应变成了一个Object:

stdClass Object
(
    [Food_Document] => stdClass Object
    (
        [Food_Type] => Fruit
        [Food_Serial] => 923490123
        [Food_Name] => Apple
        [Food_PictureName] => rotten_apple.jpg
        [Food_PictureData] => sdlkff90sd9f90af9903r90wegf90asdtlj34kljtklsmdgkqwe4otksgk
    )

)

我需要的是来自Food_PictureName和Food_PictureData的数据,但是如果它不存在,每次我尝试访问它时都会发出警告。有些对象将包含Food_PictureName和Food_PictureData,但不是所有时间都包含。有时,只有一个或另一个存在,或两者都不存在。基本上,“0次或更多次。”

这是我正在使用的代码:

function get_food_photo($serial)
{
    $soap = new SoapClient("WSDL_LINK", array('trace' => true));
    $params = new StdClass;
    $params->serialNumber = $serial;  // or whatever serial number you choose

    $res = $soap->GetFoodDocuments($params);
    $res = $res->GetFoodDocumentsResult;


    $thumbnail_data = $res->FoodDocument[0]->Food_PictureData;
    $ext = str_replace('.', '', $res->FoodDocument[0]->Food_PictureExtension);
    return '<img src="data:image/'.$ext.';base64,'.$thumbnail_data.'"/>';
}

现在,如果Food_PictureData属性不为null或为空,则访问此数据并显示它是否有效,否则,每次都会生成警告:致命错误:无法使用stdClass类型的对象作为数组

我尝试了以下内容:isset(),empty(),property_exists(),__ isset(),strlen()和其他一些。

如果不存在异常,如何在不抛出异常的情况下获取此数据?

1 个答案:

答案 0 :(得分:0)

将该功能改写为

function get_food_photo($serial)
{
    $soap = new SoapClient("WSDL_LINK", array('trace' => true));
    $params = new StdClass;
    $params->serialNumber = $serial;  // or whatever serial number you choose

    $res = $soap->GetFoodDocuments($params);
    $res = $res->GetFoodDocumentsResult;

    if (is_array($res->FoodDocument)) {
        $document = $res->FoodDocument[0];
    } else {
        $document = $res->FoodDocument;
    }

    if (property_exists($document, 'Food_PictureData')) {
        $thumbnail_data = $document->Food_PictureData;
    } else {
        $thumbnail_data = '';
    }

    if (property_exists($document, 'Food_PictureExtension')) {
        $ext = str_replace('.', '', $document->Food_PictureExtension);
    } else {
        $ext = '';
    }

    return '<img src="data:image/'.$ext.';base64,'.$thumbnail_data.'"/>';
}