PHP 8.3 新特性 - PHP INI 环境变量语法的回退值支持
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 常量的支持,这也必须仔细考虑。
请登录后再评论