发布于2025-05-05 阅读(0)
扫一扫,手机访问
PHP语言一直以来都是流行的Web编程语言之一,而且也在不断地发展和改进,新版本不断推出。最近,PHP 8 面向对象部分增加了一个新特性,即添加了对象现有属性的 null 合并。这个新特性将在以后的 Web 开发中会更加方便实用。以下将详细介绍它的特点及使用方法。
一、概述和特点
在 PHP 之前版本中,我们在使用类的时候,如果类中某个属性值为 null,就不能对它进行操作而需要进行判断等操作。但现在,PHP 8 中增加了一个叫做 null 合并的运算符,在对象属性值为 null 时可以直接进行操作,而不用再进行额外的判断和操作。
null 合并的运算符表示为 ??,在运算中可对属性值为 null 的对象进行默认值的赋值。例如:
$attr = $obj->attr ?? 'default';
以上代码的意思是,如果 $obj->attr 属性值为 null,则将它赋值为 'default'。
二、使用方法
null 合并的使用方法非常简单,比如我们在使用 PDO 时,通常需要对查询返回的数据进行判断,如果返回 null,就给默认值。以前的做法是进行 if 判断或者三目运算,但现在直接通过 null 合并来处理
$stmt = $db->query('SELECT username FROM users WHERE id = 1');
$row = $stmt->fetch();
$username = $row['username'] ?? 'No username found';
$username 被赋值为 $row['username'],如果 $row['username'] 返回不为 null 的值,$username 就被赋值为它;若 $row['username'] 返回值为 null,$username 便被赋值为 'No username found'。
另一个使用 null 合并的场景是在函数中。
function getUserName($id) {
$user = getUserFromDb($id); return $user->username ?? 'No username found';
}
在上述代码中,如果 getUserFromDb() 函数返回的 $user 对象中属性 username 的值不为 null 时,该函数将返回该值,否则返回字符串 'No username found'。
在以上两种情况中,null 合并都可以将我们的逻辑简化了很多,减少了代码量以及不必要的判断和赋值。
三、需要注意的事项
使用 null 合并时,需要特别注意:只可以处理属性值为 null。不要将它与 isset() 函数弄混淆,isset() 函数将为非 null 值返回布尔值,而 null 合并运算符只适用于 null 值。
PHP 8 之前的版本也引入了 null 合并 (??) 运算符,但它不能用于对象。这意味着在旧版本中,如果要进行 null 检查,而且需要分配一个新值,需要使用 is_null() 或三目运算符。
在设置对象属性时,不要使用 $obj->attr ??= 'default';(参考自 Python 的这一语法)。这是因为这个表达式不是一个语句,而是一个表达式,因此无法将结果分配给属性。如果 $obj->attr 为 null 则会发生 PHP 错误。
四、总结
null 合并运算符为我们带来了极大的便利。当属性值为 null 时,我们不需要做额外的操作来检查属性是否存在并设置默认值。相反,我们可以直接使用 null 合并来处理,从而使代码变得更加干净,更加简单明了。
当然,我们还是需要注意它的使用方法以及使用时需要避免的坑。总之,PHP 8 中增加的这个新特性将为我们带来更便捷的编程体验,帮助我们更快速地开发高质量的代码。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店