Тернарные операторы и PHP включает - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь использовать троичный оператор для проверки правильности файлов перед их включением вместо операторов 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";

Ответы [ 3 ]

0 голосов
/ 01 декабря 2018

Тернары обычно используются для создания строк, поэтому это не сработает, потому что вы пытаетесь использовать выражение, которое не поддерживается троичным.

Если вы абсолютно хотите избежать 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.

0 голосов
/ 01 декабря 2018

Вы не можете использовать троичный оператор, как это.Вы не можете включать в качестве истинного результата и эхо в качестве ложного результата троичного оператора.Вместо этого напишите 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);
0 голосов
/ 01 декабря 2018

В PHP есть встроенная функция: include и require в обоих вариантах с _once, которая делает работу за вас без необходимости такого троичного кондиционирования.

включает Оператор include включает и оценивает указанный файл.

require require идентичен для включения, за исключением того, что при сбое он также приведет к фатальной ошибке уровня E_COMPILE_ERROR.Другими словами, он остановит скрипт, тогда как include только выдаст предупреждение (E_WARNING), которое позволяет скрипту продолжить.

Очень упрощено: если include или include_once не находит файл, тогда PHP генерирует только E_WARNINGи сценарий продолжается.

Однако, если require или require_once не находит файл, тогда PHP генерирует ошибку FATAL и завершает сценарий.

Используйте его вместо любых условий, даже троичныхиз них.

...