PHP Возврат из функции в другой файл - PullRequest
0 голосов
/ 29 декабря 2008

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

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

if(User::loginRequired()) return;

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

User::loginRequired();

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

Спасибо.

Ответы [ 4 ]

5 голосов
/ 29 декабря 2008

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

3 голосов
/ 29 декабря 2008

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

0 голосов
/ 29 декабря 2008

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

0 голосов
/ 29 декабря 2008

Является ли содержимое внутри самой страницы динамическим? Я имею в виду, нужно ли мне проходить аутентификацию, чтобы увидеть что-то кроме страницы входа в систему, или я вижу некоторые вещи, когда я вошел в систему, и другие вещи, когда я не, и т. Д.? Потому что, если весь каталог / раздел сервера находится за экраном входа в систему, вы можете просто добавить что-то в файл .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 месяца назад и до сих пор не понимаю классов и объектов, так что я могу быть далеко от базы.

...