John Davidson

soap - Did PHP 8.1 break functionality of internal class SoapClient?


While making a library, that uses PHP's SoapClient, compatible with PHP 8.1 I came across this issue:

All properties of SoapClient are now private when they where public before.
So things like getting the last soap fault ($soapClient->__soap_fault) is no longer possible. But most methods of SoapClient return null if there was a problem and the only way of knowing what went wrong is to get __soap_fault which is no longer accessible.

How should I be working with method __doRequest without having access to the properties of SoapClient?

My Answer:
>__getLastResponse()) or setting soap headers ($soapClient->__setSoapHeaders()) are no longer possible.__This change in visibility of properties breaks compatibility with existing code that relies on accessing these properties directly.__To work around this issue, you can use the __get() and __set() magic methods to access and modify the private properties of SoapClient.__Here's an example of how you can do this:

class MySoapClient extends SoapClient {
public function __get($name) {
if (property_exists($this, $name)) {
return $this->$name;
return null;

public function __set($name, $value) {
if (property_exists($this, $name)) {
$this->$name = $value;

$soapClient = new MySoapClient('');
$response = $soapClient->__getLastResponse();

By using the __get() and __set() magic methods, you can access and modify the private properties of SoapClient in PHP 8.1 without breaking compatibility with existing code.__I hope this helps! Let me know if you have any other questions.

Rate this post

3 of 5 based on 8606 votes


© 2024 - Personal Blogs Platform. All Rights Reserved.
Create blog  |  Privacy Policy  |  Terms & Conditions  |  Contact Us