За последние 24 часа нас посетили 20603 программиста и 1008 роботов. Сейчас ищут 350 программистов ...

Функция вывода сообщений

Тема в разделе "PHP для новичков", создана пользователем antropoied, 23 апр 2019.

  1. antropoied

    antropoied Активный пользователь

    С нами с:
    8 авг 2018
    Сообщения:
    23
    Симпатии:
    0
    Имеются две функции Open_file() - открытия файла и Load_otdel() - чтения файла. Необходимо из функции Open_file() исключить блок вывода сообщения при неудачном открытии файла и создать отдельную функцию по выводу такого сообщения. Подскажите пожалуйста с чего начать, а то использование глобальной переменной коряво смотрится.
    PHP:
    1. if(!function_exists('Open_file')){
    2.   function Open_file($file){  
    3.    global $mess;
    4.     if (file_exists($file)){
    5.        $f = fopen($file, "r") ;        
    6.           }
    7.           else {
    8.            $mess.='<h3>Файл:<font color=red>'.$file.'</font>не найден</h3>';        
    9.        }    
    10.     return $f;  
    11. }}
    12.  
    13. echo $mess; //вывод сообщения
    14.  
    15. if(!function_exists('Load_otdel')){
    16. function Load_otdel($file){        
    17.         $fopen=Open_file($file);
    18.         if ($fopen){
    19.            $a = [];
    20.             while (($data = fgets($fopen))!==false){
    21.              $a0 = explode (chr(179),preg_replace("/ +/","",substr($data,24)),-14);
    22.               foreach ($a0 as $item) {
    23.                if (empty($item)) {
    24.                    $a[] = 0;
    25.                     }
    26.                     else {
    27.                         if (filter_var($item, FILTER_VALIDATE_FLOAT) !== false) {
    28.                             $a[] = $item;
    29.                         }
    30.                     }
    31.                 }
    32.             }
    33.                    fclose ($fopen);
    34.                    return $a;
    35.         }
    36. }}
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    mess (Eng) - беспорядок ))) воистину!

    Если бы я рефакторил это мессиво, я бы буквально создал функции-помошники для передачи текста ошибок. лучше всего подходит механизм флеш-переменных (т.е. "одноразовые" значения, передаваемые через сессию) скажем так:

    pushError(string $message) -- сохранить
    getErrors(): string[] -- получить и забыть

    --- Добавлено ---

    Вот сходу нагуглил реализацию флеш: https://github.com/tamtamchik/simple-flash

    --- Добавлено ---


    Суть простая как валенок: неважно будут ли редиректы и новые запросы между между вызовами pushError() и getErrors(), сообщения будут сохраняться в сессии. Как только сообщения будут прочитаны (в шаблоне вывода), они очищаются.

    PHP:
    1. function pushError($message)
    2. {
    3.     $_SESSION['flash-errors'][] = $message;
    4. }
    5.  
    6. function getErrors()
    7. {
    8.     $result = isset($_SESSION['flash-errors'])
    9.         ? $_SESSION['flash-errors']
    10.         : [];
    11.     unset($_SESSION['flash-errors']);
    12.     return $result;
    13. }
    14.  
    15. // ...
    16. foreach (getErrors() as $m) {
    17.     echo "<p class=\"error\">{$m}</p>\n";
    18. }
     
    freebsdd нравится это.
  3. antropoied

    antropoied Активный пользователь

    С нами с:
    8 авг 2018
    Сообщения:
    23
    Симпатии:
    0
    Огромное СПАСИБО за помощь, тему можно считать закрытой.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Для спасибо есть кнопка с пальцем вверх ;)
     
    antropoied нравится это.