PHP 8.3 新特性 - PHP INI 环境变量语法的回退值支持

作者: 温新

图书: 【PHP 8.3 新特性】

阅读: 529

时间: 2024-11-23 09:06:59

hi,我是温新,一名 PHPer

PHP 8.3 引入了对 PHP INI 环境变量语法的回退值支持。这意味着,当使用 ini_get() 函数获取一个配置项的值时,如果该配置项不存在,将返回一个默认值,而不是抛出异常。

PHP 8.3 扩展了对 INI 环境变量替换的支持,支持声明回退值。

在 PHP 8.3 和更高版本中,可以选择使用 :- 符号声明回退值,如下:

session.name = ${SESSION_NAME:-ZIRUCHU}
sendmail_from = "${MAIL_FROM_USER:-zi}@${MAIL_FROM_DOMAIN:-ziruchu.com}"
ini_get('session.name');
ini_get('sendmail_from');

例如,session.name 值将是 SESSION_NAME 环境变量的值,如果它被设置,但它现在使用 ZIRUCHU 值。看到这里应该知道,当没有设置值时,就使用默认值 。

支持的函数

支持回退值的函数:

  • ini_get()
  • ini_get_all()
  • ini_set()
  • get_cfg_var()
  • parse_ini_string()
  • parse_ini_file()

递归替换

环境变量回退语法还支持将环境变量作为回退值,而环境变量也可以支持其他回退变量。

session.name = ${SESSION_NAME:-${APP_NAME:-Login}}

在这个声明中,PHP 使用 SESSION_NAME 环境变量(如果可用)。否则,PHP 会尝试使用 APP_NAME(如果可用)。最后,它使用 Login 作为默认值。

PHP 常量作为默认值

对于支持在运行时更改的 PHP INI 值,INI 语法还支持使用 PHP 常量作为默认值:

define('APP_NAME', "MyApp");
parse_ini_string('name = ${SESSION_NAME:-APP_NAME}');
[
    "name" => "MyApp",
]

严格类型

PHP 也会按照标准字符串字面配置值的相同规则来强制使用回退值。

true_true = true
true_fallabck = ${FOOBAR:-true}

以上所有值在解析时都被强制转为 “1”。

false_false = false
false_fallabck = ${FOOBAR:-false}

解析时,上述所有值都被强制为 (而不是“0”)。

null 常量和不存在的环境变量将被替换为空字符串(“”)

安全考虑

即使在此更改之前,也必须验证解析用户提供的和任意 INI 值,以使其不包含不应向用户公开的环境值。

通过新的更改,语法也获得了对 PHP 常量的支持,这也必须仔细考虑。

请登录后再评论