PHP Возвращает из функции в другом файле

StackOverflow https://stackoverflow.com/questions/397142

  •  29-08-2019
  •  | 
  •  

Вопрос

У меня есть класс с именем User со статической функцией loginRequired(), которая возвращает false, если пользователь вошел в систему, и true, если пользователь вышел из системы.Он также добавляет ошибку к созданному мной классу ошибок, который сообщает пользователю, использующему сайт, что он должен войти в систему для просмотра содержимого.

Идея заключается в том, что для начала каждой функции, которая требует входа пользователя в систему, мы пишем этот код:

if(User::loginRequired()) return;

Который выдаст ошибку и немедленно вернется из функции.Однако я бы предпочел сделать это:

User::loginRequired();

И возвращайтесь из вызывающей функции внутри функции loginRequired...но поскольку loginRequired() находится в отдельном классе в отдельном файле, это не сработает.Можно ли вернуть из функции, которая вызывает loginRequired(), внутри loginRequired()?

Спасибо.

Это было полезно?

Решение

Я видел, как ряд приложений с открытым исходным кодом справляются с этим, имея require_login() функция, которая выполняет перенаправление, если пользователь не вошел в систему.

Другие советы

Я не уверен, что вы можете делать именно то, что хотите, однако, возможно, вы захотите рассмотреть возможность использования исключения.Это позволило бы вам создать исключение в функции User::loginRequired и перехватить его на каком-то более высоком уровне.Вы также могли бы рассмотреть возможность использования выход() Функция PHP.

Является ли содержимое ВНУТРИ самой страницы динамичным?Я имею в виду, нужно ли мне проходить аутентификацию просто для того, чтобы увидеть что-либо, кроме страницы входа, или я вижу некоторые вещи, когда я вхожу в систему, и другие вещи, когда я этого не делаю, и т.д.?Потому что, если весь каталог / раздел сервера находится за экраном входа в систему, вы могли бы просто добавить что-то в файл .htaccess каталога, который перенаправляет всех, кто не вошел в систему, и т.д.

С другой стороны, вы могли бы включить этот файл, содержащий статус входа, в любую страницу / скрипт, которые просматривает пользователь, при этом включенный файл возвращал бы только статус входа вместо всего его содержимого.Это описано в разделе включает в себя в примере 5, "include() и оператор return()".Если бы вы сделали это, вы могли бы использовать троичное условие типа:

$logged_in = (include('userlogin.php') == TRUE) ? TRUE : FALSE;

И тогда в каждой защищенной функции есть что-то вроде:

global $logged_in;

Вы все еще застряли с предложением IF, заключающим в себе всю функцию, но, по крайней мере, у вас есть статус входа в систему.Если вы хотите избавиться от IF внутри функции, вы всегда можете сделать вызов функции условным.Нравится:

$content = ($logged_in == TRUE) ? some_function() : redirect_User();

С другой стороны, я только начал изучать этот материал 2 месяца назад и до сих пор не разбираюсь в классах и объектах, так что я мог бы сильно отклонился от основы.

ОТ:Я бы рассмотрел возможность изменения имени метода на isLoggedIn(), если описанная вами цель является единственной.Метод, называемый loginRequired(), лучше защищал бы конфиденциальный контент.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top