PHP8.1升级后SOAP代码报错"Attempt to assign property "username" on null"修复咨询
问题解决:PHP 8.1下SOAP调用报错"Attempt to assign property "username" on null"
错误原因
PHP 7.4及更高版本(包括8.1)严格禁止对未初始化的嵌套对象属性直接赋值。原代码中$authHeader是一个空的stdClass,但$authHeader->UsernameToken并未被初始化(默认是null),直接给$authHeader->UsernameToken->Username赋值会触发致命错误。
修改后的代码
function checkVATGR($username,$password,$AFMcalledby="",$AFMcalledfor) { $client = new SoapClient( "https://www1.gsis.gr/webtax2/wsgsis/RgWsPublic/RgWsPublicPort?WSDL",array('trace' => true) ); //$version = $client->rgWsPublicVersionInfo(); $authHeader = new stdClass(); // 先初始化UsernameToken为stdClass对象 $authHeader->UsernameToken = new stdClass(); $authHeader->UsernameToken->Username = $username; $authHeader->UsernameToken->Password = $password; $Headers[] = new SoapHeader('http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', 'Security', $authHeader,TRUE); $client->__setSoapHeaders($Headers); $result = $client->rgWsPublicAfmMethod( array( 'afmCalledBy'=>$AFMcalledby, 'afmCalledFor'=>$AFMcalledfor, ) ); return $result; }
关键修改点
- 新增
$authHeader->UsernameToken = new stdClass();:提前创建UsernameToken对象,确保后续对其属性赋值时,它不是null。 - 移除了变量外的冗余引号(
"$username"改为$username),代码更规范且不影响功能。
内容的提问来源于stack exchange,提问作者Tolaso
相关产品推荐
相关产品推荐

