PHP: include 语句中的三元运算符,变量未定义

PHP: ternary operator inside include statement, variable undefined

我正在 include 语句中使用三元运算符检查一个变量,但该变量变为未定义:

<?php include('../partials/' . isset($altnav) ? $altnav . '.php' : '_nav.php'); ?>

也许 $altnav 需要回应?但我不认为这可以在 include 语句中完成。

我是否必须创建一个新变量并使用这样的两行代码?:

<?php $pathpart = isset($altnav) ? $altnav . '.php' : '_nav.php';
include('../partials/' . $pathpart ); ?>

操作顺序。将三元运算用括号括起来:

include('../partials/'.(isset($altnav) ? $altnav.'.php' : '_nav.php'));

没有括号,它会在检查 ?三元运算符。

如另一个答案所示,由于运算符优先级的原因,您的代码未按预期执行,但假设您为简洁起见使用三元运算符,这里还有其他几点。

  1. 您可以省略外括号。 include 不是函数,因此不需要它们。

  2. 您不需要为此使用三元运算符。 This is the purpose of the null coalescing operator that was added in PHP 7.

    include '../partials/' . ($altnav ?? '_nav')  . '.php';