--TEST-- Bug #36226 (Inconsistent handling when passing nillable arrays) --EXTENSIONS-- soap --INI-- soap.wsdl_cache_enabled=0 --FILE-- server = new SoapServer($wsdl, $options); $this->server->addFunction('PostEvents'); } function __doRequest($request, $location, $action, $version, $one_way = 0): string { echo "$request\n"; $this->server->handle($request); return $response; } } $soapClient = new TestSoapClient($wsdl, array( 'trace' => 1, 'exceptions' => 0, 'classmap' => array( 'logOnEvent' => 'LogOnEvent', 'logOffEvent' => 'LogOffEvent', 'events' => 'IVREvents' ), 'features' => SOAP_SINGLE_ELEMENT_ARRAYS )); $logOnEvent = null; //$logOnEvent = array(); $logOffEvents[] = new LogOffEvent(34567, $timestamp, "Smoked"); //$logOffEvents[] = new LogOffEvent(34568, $timestamp, "SmokeFree"); $ivrEvents = new IVREvents("1.0", 101, 12345, 'IVR', $logOnEvent, $logOffEvents); $result = $soapClient->PostEvents($ivrEvents); class LogOffEvent { public $audienceMemberId; public $timestamp; public $smokeStatus; public $callInitiator; function __construct($audienceMemberId, $timestamp, $smokeStatus) { $this->audienceMemberId = $audienceMemberId; $this->timestamp = $timestamp; $this->smokeStatus = $smokeStatus; $this->callInitiator = "IVR"; } } class LogOnEvent { public $audienceMemberId; public $timestamp; function __construct($audienceMemberId, $timestamp) { $this->audienceMemberId = $audienceMemberId; $this->timestamp = $timestamp; } } class IVREvents { public $version; public $activityId; public $messageId; public $source; public $logOnEvent; public $logOffEvent; function __construct($version, $activityId, $messageId, $source, $logOnEvent=NULL, $logOffEvent=NULL) { $this->version = $version; $this->activityId = $activityId; $this->messageId = $messageId; $this->source = $source; $this->logOnEvent = $logOnEvent; $this->logOffEvent = $logOffEvent; } } ?> --EXPECTF-- object(IVREvents)#%d (%d) { ["version"]=> string(3) "1.0" ["activityId"]=> int(101) ["messageId"]=> int(12345) ["source"]=> string(3) "IVR" ["logOnEvent"]=> NULL ["logOffEvent"]=> array(1) { [0]=> object(LogOffEvent)#%d (%d) { ["audienceMemberId"]=> int(34567) ["timestamp"]=> string(25) "2005-11-08T11:22:07+03:00" ["smokeStatus"]=> string(6) "Smoked" ["callInitiator"]=> string(3) "IVR" } } }