2012-12-16 75 views
2
include ($_GET['p'] == 'home') ? 'pages/home.php' : NULL; 

给出了错误:三元操作员错误include()函数

Notice: Undefined index: p in /var/www/index.php on line 38
Warning: require(): Filename cannot be empty in /var/www/index.php on line 38
Fatal error: require(): Failed opening required '' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/index.php on line 38

我明白未定义的索引,但为什么我得到其他错误?此行:

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

工作正常。请注意,第一个代码将在if语句中正常工作(除了我明白的未定义索引外)

+0

通知是非常低的水平。大多数人不理会他们,或者如果他们得到一对夫妇(我赞成或反对),他们不会感到困扰。致命的错误是问题所在。 –

+0

错误说需要,你的代码包含。请解决你的问题,显然是提供了错误的信息。此外,错误信息非常清晰。我想知道哪些部分对你来说是不可理解的。很高兴知道给出更好的答案。我们还在网站上提供了一些可能对您有用的参考资料:[参考 - 这个错误在PHP中意味着什么?](http://stackoverflow.com/q/12769982/367456) - 它还涵盖了您拥有的所有消息给出。 – hakre

+0

感谢您的链接。我正在使用include,不需要 - 即使输出的错误与require有关。 – tgun926

回答

6

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

只需使用一个if代替:

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

哦,所以PHP中的三元运算符会在继续之前检查两个案例吗?谢谢 – tgun926

+0

@helpabeginner编号这主要是因为条件表达式返回'null',以防''_GET ['p'] =='home''条件错误。这将导致你观察到的情况。 – Gumbo

+0

这很有道理,谢谢! – tgun926

0

请不要那样做!尝试这样的代替:

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

这段代码没有很好的理由,对评估表达式'''有无用的副作用。 –

+0

@Jack我通常会同意你的观点,然而OP显然希望他的代码在一行上。否则,他们不会使用三元语句来完成简单的if语句。 – PhearOfRayne

+0

这段代码不起作用,'include'不是一个函数。 – hakre