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


Getting SOAP response in PHP even if value is not set

我不经常使用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()和其他一些方法。

如果数据不存在,如何在不引发异常的情况下获取该数据?

将函数重写为

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.'"/>';
}