PHP:包含语句的三元运算符,变量undefined

时间:2017-05-17 19:49:55

标签: php variables include ternary-operator

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

操作顺序。将三元运算括在括号中:

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

没有括号,它会连接&#39; ../ partials /&#39;检查之前到isset($ altnav)的结果?三元运算符。

答案 1 :(得分:1)

由于运算符优先级,您的代码没有达到预期的效果,如另一个答案中所示,但假设您使用三元运算符是为了简洁起见,这里还有其他几点。

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

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

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