PHP Возвращает из функции в другом файле
Вопрос
У меня есть класс с именем 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(), лучше защищал бы конфиденциальный контент.