在 PHP 中,确实不能直接对一个函数调用的返回值使用 isset()
。你可以使用 null
比较来避免这种情况。以下是修改后的代码示例,采用比较的方法来检查返回值:
方法 1: 使用 null
比较
// 判断是否开启了邮件通知
if (configSystem('email_notice') !== null && configSystem('email_notice') == 1) {
// 如果用户邮箱验证了并且开启了邮件通知
if ($user->email_notification == 1 && $user->email_verify == 1) {
foreach ($expireServers as $server) {
echo (date('Y-m-d H:i:s') . ' - 发送到期邮件通知') . PHP_EOL;
Log::info(date('Y-m-d H:i:s') . ' - 发送服务器到期通知邮件');
EmailService::sendServerExpireNotice($user, $server);
}
}
}
方法 2: 使用 null 合并运算符(推荐)
如果您使用 PHP 7.0 或更高版本,可以继续使用 null 合并运算符,也可以用下面的方法来简化:
// 判断是否开启了邮件通知
if ((configSystem('email_notice') ?? 0) == 1) {
// 如果用户邮箱验证了并且开启了邮件通知
if ($user->email_notification == 1 && $user->email_verify == 1) {
foreach ($expireServers as $server) {
echo (date('Y-m-d H:i:s') . ' - 发送到期邮件通知') . PHP_EOL;
Log::info(date('Y-m-d H:i:s') . ' - 发送服务器到期通知邮件');
EmailService::sendServerExpireNotice($user, $server);
}
}
}
解释
!== null
:这确保了configSystem('email_notice')
返回的值不为null
。- null 合并运算符
??
:如果configSystem('email_notice')
的返回值是null
,它将默认使用0
,否则使用该值。
这两种方式可以避免您最开始遇到的错误。选择适合您代码风格和PHP版本的方法即可。