include()函数的三元运算符错误

时间:2012-12-16 09:44:02

标签: ternary-operator php

include ( $_GET['p'] == 'home') ? 'pages/home.php' : NULL;

给出错误:

  

注意:未定义的索引:p在第38行的/var/www/index.php中   警告:   require():第38行的/var/www/index.php中的文件名不能为空。
  致命错误:require():打开所需的失败''   (include_path ='。:/ usr / share / php:/ usr / share / pear')in   第38行/var/www/index.php

我理解未定义的索引,但为什么我会得到其他错误?这一行:

include ( !isset($_GET['p'])) ? 'pages/home.php': NULL;

工作正常。请注意,第一个代码在if语句中可以正常工作(除了我理解的未定义索引)

2 个答案:

答案 0 :(得分:7)

include需要一个字符串,表示要包含的文件的路径。所以NULL will get converted to string that results in an empty string。因此,包含空字符串引用的文件会导致警告。

只需使用if代替:

if (!isset($_GET['p'])) {
    include 'pages/home.php';
}

答案 1 :(得分:0)

请不要那样做!尝试这样的事情:

(isset($_GET['p']) && $_GET['p'] === 'home') ? include 'pages/home.php' : '';