【问题标题】:Ternary operators and PHP includes三元运算符和 PHP 包括
【发布时间】:2018-11-30 21:25:59
【问题描述】:

我正在尝试使用三元运算符在包含文件而不是 if 语句之前检查文件的有效性;但由于某种原因页面返回空白,我无法使其正常工作。我错过了什么?

(is_file('connect.php')) ? include 'connect.php' : echo "erreur de chargement"; 
(is_file('header.html')) ? include 'header.html' : echo "erreur de chargement";
(is_file('nav.html')) ? include 'nav.html' : echo "erreur de chargement";
(is_file('table.html')) ? include 'table.html' : echo "erreur de chargement";
(is_file('footer.html')) ? include 'footer.html' : echo "erreur de chargement";

【问题讨论】:

  • 启用错误报告。 php.net/manual/en/function.error-reporting.php 这会反弹什么?
  • echo 是一个语句,而不是一个表达式。您不只是使用require 有什么特别的原因吗?
  • 我不知道我只是养成了在插入文件或在函数中使用它们之前测试每个文件等的习惯,这样如果我的代码的某些部分由于某些原因而无法工作,我以后可以更轻松地解决问题丢失,或者如果在复制文件名时打错了等。但是你们是对的,在这种情况下,我可能会无缘无故地这样做。事实上,“回声”部分是这里的问题。因此,出于好奇,如果您想在文件不存在时获得我正在寻找的结果,那么您必须使用 if/else 语句而不是 this 运算符?
  • @gountaa,您是否在其中任何一个答案中找到了合适的解决方案?如果没有,请告诉我们更多信息。否则,请接受最适合您解决问题的解决方案 - 请参阅What should I do when someone answers my question?

标签: php include ternary-operator


【解决方案1】:

三元组通常用于创建字符串,因此这不起作用,因为您尝试使用三元组不支持的表达式。

如果您出于某种原因绝对想避免使用require,最好制作一个您需要包含的文件数组,然后循环遍历它们。

$require = [
    'connect.php', 
    'header.html'
    //... etc
];

foreach($require as $file) {
    if(is_file($file)) {

        //if file exists, include and continue to next requirement
        include $file;
        continue;
    }

    //if this code is reached, the file does not exist.
    echo "erreur de chargement $file";
    //or die("erreur de chargement $file"); if you want the page to stop executing on failure
}

这也很好,因为您可以轻松添加新需求,甚至创建一个自动放入此数组的需求数据库。

但是,使用require 肯定会更容易且更推荐。

【讨论】:

  • 非常感谢这回答了我所有的问题:)
【解决方案2】:

你不能像那样使用三元运算符。您不能将三元运算符的真实结果包含为真实结果并回显为虚假结果。改用if 写:

if (is_file('connect.php')) include 'connect.php' else echo "erreur de chargement"; 
if (is_file('header.html')) include 'header.html' else echo "erreur de chargement";
if (is_file('nav.html')) include 'nav.html' else echo "erreur de chargement";
if (is_file('table.html')) include 'table.html' else echo "erreur de chargement";
if (is_file('footer.html')) include 'footer.html' else echo "erreur de chargement";

为什么会看到空白页?

这是因为您关闭了错误报告。在代码的第一行使用它来启用错误报告:

error_reporting(E_ALL);

【讨论】:

    【解决方案3】:

    PHP 中有内置功能:includerequire 都带有 _once 的变体,无需此类三元条件即可为您完成工作。

    include include 语句包含并评估指定的文件。

    require require 与 include 相同,但失败时也会产生致命的 E_COMPILE_ERROR 级别错误。换句话说,它会停止脚本,而 include 只会发出一个警告 (E_WARNING) 允许脚本继续。

    非常简单:如果 include 或 include_once 没有找到文件,那么 PHP 只生成 E_WARNING 并且脚本继续。

    但是,如果 require 或 require_once 没有找到该文件,则 PHP 会生成一个致命错误并终止脚本。

    使用它代替任何类型的条件,甚至是三元条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 2011-04-04
      • 2012-08-08
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多