【问题标题】:Ternary operator error with include () function [closed]包含()函数的三元运算符错误[关闭]
【发布时间】:2012-12-16 09:44:02
【问题描述】:
include ( $_GET['p'] == 'home') ? 'pages/home.php' : NULL;

给出错误:

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

我了解未定义的索引,但为什么会出现其他错误?这一行:

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

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

【问题讨论】:

  • 通知级别很低。大多数人会忽略他们,或者如果他们得到一对(我赞成或反对)就不会打扰。致命错误就是问题所在。
  • 错误说需要,您的代码包含。请解决您的问题,它显然提供了错误的信息。错误信息也很清楚。我想知道其中哪一部分是您无法理解的。很高兴知道能给出更好的答案。我们在网站上还有一个可能对您有用的参考:Reference - What does this error mean in PHP? - 它还涵盖了您提供的所有信息。
  • 感谢您的链接。我使用的是包含,而不是要求 - 即使输出的错误与要求有关。

标签: ternary-operator php


【解决方案1】:

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

只需使用 if 代替:

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

【讨论】:

  • 哦,那么 PHP 中的三元运算符会在继续之前检查这两种情况吗?谢谢
  • @helpabeginner 没有。这主要是因为条件表达式返回null,以防条件$_GET['p'] == 'home'为假。这将导致您观察到的情况。
  • 有道理,谢谢!
【解决方案2】:

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

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

【讨论】:

  • 这段代码有一个无用的副作用,无缘无故地评估表达式''
  • @Jack 我通常会同意你的观点,但是 OP 显然希望他的代码放在一行上。否则他们不会使用三元语句来完成简单的 if 语句。
  • 这段代码不起作用,include 不是函数。
  • 这就是我们在这里的原因,让他们明白他们不应该把所有东西都放在一条线上:)
  • @hakre 我很想知道你认为在哪里有任何引用包括被称为函数?在 php 中,include 是一种特殊的语言结构,因此它的参数不需要括号。
猜你喜欢
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
  • 2012-10-18
  • 2014-05-03
  • 1970-01-01
  • 2015-02-15
相关资源
最近更新 更多