Имеются две функции Open_file() - открытия файла и Load_otdel() - чтения файла. Необходимо из функции Open_file() исключить блок вывода сообщения при неудачном открытии файла и создать отдельную функцию по выводу такого сообщения. Подскажите пожалуйста с чего начать, а то использование глобальной переменной коряво смотрится. PHP: if(!function_exists('Open_file')){ function Open_file($file){ global $mess; if (file_exists($file)){ $f = fopen($file, "r") ; } else { $mess.='<h3>Файл:<font color=red>'.$file.'</font>не найден</h3>'; } return $f; }} echo $mess; //вывод сообщения if(!function_exists('Load_otdel')){ function Load_otdel($file){ $fopen=Open_file($file); if ($fopen){ $a = []; while (($data = fgets($fopen))!==false){ $a0 = explode (chr(179),preg_replace("/ +/","",substr($data,24)),-14); foreach ($a0 as $item) { if (empty($item)) { $a[] = 0; } else { if (filter_var($item, FILTER_VALIDATE_FLOAT) !== false) { $a[] = $item; } } } } fclose ($fopen); return $a; } }}
mess (Eng) - беспорядок ))) воистину! Если бы я рефакторил это мессиво, я бы буквально создал функции-помошники для передачи текста ошибок. лучше всего подходит механизм флеш-переменных (т.е. "одноразовые" значения, передаваемые через сессию) скажем так: pushError(string $message) -- сохранить getErrors(): string[] -- получить и забыть --- Добавлено --- Вот сходу нагуглил реализацию флеш: https://github.com/tamtamchik/simple-flash --- Добавлено --- Суть простая как валенок: неважно будут ли редиректы и новые запросы между между вызовами pushError() и getErrors(), сообщения будут сохраняться в сессии. Как только сообщения будут прочитаны (в шаблоне вывода), они очищаются. PHP: function pushError($message) { $_SESSION['flash-errors'][] = $message; } function getErrors() { $result = isset($_SESSION['flash-errors']) ? $_SESSION['flash-errors'] : []; unset($_SESSION['flash-errors']); return $result; } // ... foreach (getErrors() as $m) { echo "<p class=\"error\">{$m}</p>\n"; }