PHP8.0类变量赋值报错解决方法
PHP8.0中类变量存储数据的陷阱在PHP8.0中使用类成员变量存储数据时,可能会遇到一些与PHP7.x版本不同的行为。本...

PHP8.0类变量陷阱及规避方法
PHP8.0在处理类成员变量赋值方面与之前的版本有所不同,可能导致一些意想不到的错误。本文将通过一个邮件发送类的例子,分析PHP8.0中遇到的问题,并提供解决方案。
问题:
以下代码片段定义了一个名为Send的类,用于发送邮件。在sendMail方法中,试图向_email属性的to属性赋值,却引发了“Attempt to assign property "to" on null”错误。
class Send
{
private $_email;
public function sendMail()
{
$this->_email->to = 'xxx';
$this->do();
}
public function do()
{
// code
}
}
在PHP7.x版本中,此代码可能不会报错,因为PHP7.x会隐式地创建一个stdClass对象。然而,PHP8.0改变了这一行为。
PHP8.0的改变:
PHP8.0将许多警告提升为错误异常,其中就包括向非对象属性赋值的情况。PHP7.x中隐式创建stdClass对象的机制在PHP8.0中被移除。如果$this->_email为null,则直接抛出错误。
解决方案:
为了避免此错误,必须在类的构造函数中初始化_email属性为一个对象,例如stdClass实例或其他合适的对象。
通过在构造函数中初始化_email,确保在sendMail方法中访问$this->_email时,它已经是一个对象,从而避免“Attempt to assign property "to" on null”错误。 这体现了PHP8.0对代码规范性的增强,开发者需要更加注重变量的初始化。 以下为修改后的代码:
class Send
{
private $_email;
public function __construct() {
$this->_email = new stdClass();
}
public function sendMail()
{
$this->_email->to = 'xxx';
$this->do();
}
public function do()
{
// code
}
}
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















