Skip to content

Commit f516768

Browse files
committed
SoapClient - use CompatTrait to gracefully handle php 8.5's __doRequest signature update
1 parent 9f5aeda commit f516768

3 files changed

Lines changed: 91 additions & 27 deletions

File tree

src/Debug/Collector/SoapClient.php

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use bdk\Debug;
1414
use bdk\Debug\Abstraction\Abstraction;
1515
use bdk\Debug\Abstraction\Type;
16+
use bdk\Debug\Collector\SoapClient\CompatTrait;
1617
use DOMDocument;
1718
use Exception;
1819
use ReflectionClass;
@@ -28,6 +29,8 @@
2829
*/
2930
class SoapClient extends SoapClientBase
3031
{
32+
use CompatTrait;
33+
3134
/** @var Debug */
3235
private $debug;
3336

@@ -101,32 +104,6 @@ public function __call($name, $args)
101104
return $return;
102105
}
103106

104-
/**
105-
* {@inheritDoc}
106-
*/
107-
#[\ReturnTypeWillChange]
108-
public function __doRequest($request, $location, $action, $version, $oneWay = 0, $uriParserClass = null)
109-
{
110-
$exception = null;
111-
try {
112-
$xmlResponse = PHP_VERSION_ID >= 80500
113-
? parent::__doRequest($request, $location, $action, $version, $oneWay, $uriParserClass)
114-
: parent::__doRequest($request, $location, $action, $version, $oneWay);
115-
} catch (SoapFault $e) {
116-
// we'll rethrow bellow
117-
}
118-
$this->setLastRequest($request);
119-
$this->setLastResponse($xmlResponse);
120-
if ($this->isViaCall() === false) {
121-
// __doRequest called directly
122-
$this->logReqRes($action, $exception, true);
123-
}
124-
if ($exception) {
125-
throw $exception;
126-
}
127-
return $xmlResponse;
128-
}
129-
130107
/**
131108
* Get defined types keyed by name
132109
*
@@ -239,6 +216,44 @@ private function debugGetXmlResponse(&$faultInfo)
239216
return $this->dom->saveXML();
240217
}
241218

219+
/**
220+
* Handle __doRequest
221+
*
222+
* @param string $request The XML SOAP request.
223+
* @param string $location The URL to request.
224+
* @param string $action The SOAP action.
225+
* @param int $version The SOAP version.
226+
* @param bool $oneWay If set to true, this method returns nothing.
227+
* Use this where a response is not expected.
228+
* @param string|null $uriParserClass (PHP 8.5+) URI parser class
229+
*
230+
* @return string|null The XML SOAP response.
231+
*
232+
* @throws Exception
233+
*/
234+
#[\ReturnTypeWillChange]
235+
private function doDoRequest($request, $location, $action, $version, $oneWay = false, $uriParserClass = null)
236+
{
237+
$exception = null;
238+
try {
239+
$xmlResponse = PHP_VERSION_ID >= 80500
240+
? parent::__doRequest($request, $location, $action, $version, $oneWay, $uriParserClass)
241+
: parent::__doRequest($request, $location, $action, $version, $oneWay);
242+
} catch (SoapFault $e) {
243+
// we'll rethrow bellow
244+
}
245+
$this->setLastRequest($request);
246+
$this->setLastResponse($xmlResponse);
247+
if ($this->isViaCall() === false) {
248+
// __doRequest called directly
249+
$this->logReqRes($action, $exception, true);
250+
}
251+
if ($exception) {
252+
throw $exception;
253+
}
254+
return $xmlResponse;
255+
}
256+
242257
/**
243258
* Check if __call is in backtrace
244259
*
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php // phpcs:ignore PSR1.Files.SideEffects.FoundWithSymbol
2+
3+
/**
4+
* @package bdk/debug
5+
* @author Brad Kent <bkfake-github@yahoo.com>
6+
* @license http://opensource.org/licenses/MIT MIT
7+
* @copyright 2024-2025 Brad Kent
8+
* @since 3.5.1
9+
*/
10+
11+
/*
12+
PHP 8.5 updates __doRequest signature
13+
*/
14+
15+
namespace bdk\Debug\Collector\SoapClient;
16+
17+
$traitExists = \trait_exists(__NAMESPACE__ . '\\CompatTrait', false);
18+
19+
if (PHP_VERSION_ID >= 80400 && !$traitExists) {
20+
/**
21+
* @phpcs:disable Generic.Classes.DuplicateClassName.Found
22+
*/
23+
trait CompatTrait
24+
{
25+
/**
26+
* {@inheritDoc}
27+
*/
28+
#[\ReturnTypeWillChange]
29+
public function __doRequest($request, $location, $action, $version, $oneWay = 0, $uriParserClass = null)
30+
{
31+
return $this->doDoRequest($request, $location, $action, $version, $oneWay, $uriParserClass);
32+
}
33+
}
34+
} elseif (!$traitExists) {
35+
/**
36+
* @phpcs:disable Generic.Classes.DuplicateClassName.Found
37+
*/
38+
trait CompatTrait
39+
{
40+
/**
41+
* {@inheritDoc}
42+
*/
43+
#[\ReturnTypeWillChange]
44+
public function __doRequest($request, $location, $action, $version, $oneWay = 0)
45+
{
46+
return $this->doDoRequest($request, $location, $action, $version, $oneWay);
47+
}
48+
}
49+
}

tests/Debug/Helper.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public static function logEntryToArray($logEntry, $withKeys = true, $dropEmptyMe
9090
}
9191
return $withKeys
9292
? $return
93-
: array_values($return);
93+
: \array_values($return);
9494
}
9595

9696
public function resetContainerValue($name)

0 commit comments

Comments
 (0)