我正在写一个亚马逊MWS脚本,需要包含多个PHP文件并运行包含在这些文件中的函数。如何在一个PHP脚本中包含和调用多个函数?
每个函数都可以从各自的PHP文件中运行,但只运行第一个函数。第二个函数,无论我使用什么顺序,都会引发关于我通过它的参数的致命错误。
Fatal error: Uncaught exception 'Exception' with message 'Unable to construct from provided data. Please be sure to pass associative array or DOMElement'
这里是前两个函数我试图运行:
// Initialize and run ListInboundShipments.
require_once 'ListInboundShipments.php';
// Set status array and timeframe criteria for filtering shipments
$shipmentStatusList = new FBAInboundServiceMWS_Model_ShipmentStatusList();
$shipmentStatusList->setMember(array('WORKING','SHIPPED','IN_TRANSIT','DELIVERED','CHECKED_IN','RECEIVING','CLOSED','CANCELLED','DELETED','ERROR'));
$updatedAfter = date('Y-m-d', mktime(0, 0, 0, date("m")-1, date("d"), date("Y")));
$updatedBefore = date('Y-m-d');
// Pass filter criteria into $request array
$request->setShipmentStatusList($shipmentStatusList);
$request->setLastUpdatedAfter($updatedAfter);
$request->setLastUpdatedBefore($updatedBefore);
// Create XML document of shipments.
$shipmentXML = invokeListInboundShipments($service, $request);
// Parse the new XML document.
$shipments = new SimpleXMLElement($shipmentXML);
$shipmentArray = array();
foreach ($shipments->ListInboundShipmentsResult->ShipmentData->member as $member) {
// Create array of all shipments.
$shipmentArray[] = array(
"ShipmentId"=>$member->ShipmentId,
"ShipmentStatus"=>$member->ShipmentStatus
);
}
// Destroy variables to get a clean slate.
unset($service); unset($request);
// Save token and run through ListInboundShipmentsByNextToken until
// it does not return a token.
$token = (string)$shipments->ListInboundShipmentsResult->NextToken;
while ($token != null) {
require_once 'ListInboundShipmentsByNextToken.php';
$request->setNextToken($token);
echo print_r($request);
// Create new XML document.
$shipmentXML = invokeListInboundShipmentsByNextToken($service, $request);
$shipments = new SimpleXMLElement($shipmentXML);
// Use XML document to create array of all shipments.
foreach ($shipments->ListInboundShipmentsResult->ShipmentData->member as $member) {
$shipmentArray[] = array(
"ShipmentId"=>$member->ShipmentId,
"ShipmentStatus"=>$member->ShipmentStatus
);
}
$token = $shipments->ListInboundShipmentsResult->NextToken;
}
的echo print_r($request)
声明表明我$request
确实是一个关联数组。我想也许错误是由冲突变量引起的(每个函数使用$ request和$ service),所以我尝试在调用它们之间使用unset()
。
如果'$ request'是一个关联数组,则不能调用类似'$ request-> setNextToken()'的方法。这需要'$ request'作为一个对象。但是你'unset($ request)',那么'$ request'怎么设置为任何东西呢? – Barmar
@Barmar:在'require_once'运行的文件中创建'$ request'。但你说得对,'$ request'是一个对象。也许这就是我的问题所在。它是一个包含多个关联数组的对象。它应该是一个数组数组吗? –