Я продолжаю получать эту ошибку:
Argument 1 passed to myFunction() must be an instance of SimpleXMLElement, null given
Вот мой код:
function myFunction(SimpleXMLElement $order_status_response_element) {
// Get any invoices firstly.
$invoice_details_element_array = $order_status_response_element->xpath('//Detail/RefInfo/RefIDQual[text()="IN"]/parent::*/parent::*');
$invoice_numbers_element_array = $order_status_response_element->xpath('//Detail/RefInfo/RefIDQual[text()="IN"]/parent::RefInfo/RefID');
$non_invoice_details_element_array = $order_status_response_element->xpath('//Detail[not(RefInfo/RefIDQual[text()="IN"])]');
if(count($non_invoice_details_element_array) > 1) throw new Exception('More than one instance of non-invoiced details in array! Aborting!');
$non_invoice_details_element = $non_invoice_details_element_array[0];
echo("non_invoice_details_element is a SimpleXMLElement, true? ".is_a($non_invoice_details_element,'SimpleXMLElement')."\n");$non_invoice_detail = sXMLtoArray($non_invoice_details_element);
^^^ERROR HAPPENS HERE^^^
}
/**
* Return an array, given a SimpleXMLElement object.
*
* @param SimpleXMLElement $elem
* @return array
*/
function sXMLtoArray(SimpleXMLElement $elem) {
return json_decode(json_encode($elem),TRUE);
}
Теперь вывод, который я получаю, выглядит так:
non_invoice_details_element is a SimpleXMLElement, true? 1
Argument 1 passed to sXMLtoArray() must be an instance of SimpleXMLElement, null given, called in {path} on line 2033 and defined {paths}
Так что если is_a()
говорит мне, что это действительно SimpleXMLElement, тогда почему он думает, что он нулевой, когда его передают в sXMLtoArray()
функционировать? Если бы это не был SimpleXMLElement, тогда он все равно выдал бы исключение, потому что $ non_invoice_details_element_array был бы нулевой длины, так как xpath не существовал бы.
Какого черта здесь не так?
Задача ещё не решена.
Других решений пока нет …