我不经常使用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()和其他一些。
如果不存在异常,如何在不抛出异常的情况下获取此数据?
答案 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.'"/>';
}