Ich schreibe ein Amazon MWS-Skript, das mehrere PHP-Dateien enthalten und Funktionen ausführen muss, die in diesen Dateien enthalten sind.Wie können Sie mehrere Funktionen in einem PHP-Skript einschließen und aufrufen?
Jede Funktion läuft gut aus ihrer eigenen PHP-Datei, aber nur die erste Funktion läuft. Die zweite Funktion, egal in welcher Reihenfolge, gibt einen Fatal Error über die Parameter aus, die ich durchführe.
Fatal error: Uncaught exception 'Exception' with message 'Unable to construct from provided data. Please be sure to pass associative array or DOMElement'
Hier sind die ersten beiden Funktionen, die ich zu laufen versuche:
// 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;
}
Die echo print_r($request)
Aussage zeigt mir, dass $request
in der Tat ein assoziatives Array ist. Ich dachte, dass der Fehler möglicherweise durch widersprüchliche Variablen verursacht wurde (jede Funktion verwendet $ request und $ service), also habe ich versucht, sie zwischen unset()
aufzurufen.
Wenn '$ request' ein assoziatives Array ist, können Sie keine Methoden wie' $ request-> setNextToken() 'aufrufen. Das erfordert $ request, um ein Objekt zu sein. Aber du hast 'unset ($ request)' 'gemacht, also wie ist' $ request' überhaupt gesetzt? – Barmar
@Barmar: '$ request' wird in den Dateien erstellt, die von' require_once' ausgeführt werden. Aber Sie haben recht, dass '$ request' ein Objekt ist. Vielleicht liegt das an meinem Problem. Es ist ein Objekt, das mehrere assoziative Arrays enthält. Sollte es stattdessen ein Array von Arrays sein? –