У меня есть функция, называемая isLoggedIn()
Это возвращает FALSE
или TRUE
на основании того, вошел ли пользователь в систему или нет. Он делает это, проверяя, установлены ли пользовательские данные в сеансе.
У меня есть еще одна функция, называемая getUserSession()
которая извлекает и возвращает пользовательские данные в сеансе. Мой вопрос: согласен ли их объединить?
Я имею в виду, что isLoggedIn () уже имеет доступ к значениям сеанса, поэтому, если я верну его в функции, я использую его так:
//when I need session data $user = isLoggedIn(); echo "Hello ".$user['name']; //when I need to check if user is not logged in if(!isLoggedIn()) { echo "Please login to proceed!"; }
Есть ли проблема с этим подходом? Мой коллега говорит, что я не должен их объединять, но я не понимаю, что здесь вызывает беспокойство …
Если вы собираетесь объединить их, сделайте что-то вроде этого
if($user = isLoggedIn()) { echo "Hello ".$user['name']; } else { echo "Please login to proceed!"; }
Вы можете объединить их, но вам нужно какое-то значение для соответствия тому, кто не вошел в систему. Например, если у вас есть функция, называемая getUserSession()
которая просто вернула $_SESSION['User']
вы можете реализовать ее как-то вроде :
function getUserSession() { return isset($_SESSION['User']) ? $_SESSION['User'] : NULL; }
Теперь NULL
будет представлять недопустимый сеанс (пользователь не вошел в систему). Все, что вам нужно сделать, это проверить, является ли ваш сеанс NULL, и вы знаете, что Пользователь не вошел в систему.
$user = getUserSession(); if ($user != NULL) { //Stuff here with a valid session } else { //Do stuff if the user is not logged in }
Вы обеспокоены тем, что вы возвращаете все, что может быть оценено как false
. Это включает 0
, пустую строку, "false"
, пустой массив, некоторые из которых могут быть действительным значением сеанса. Например, если у вас не было значений сеанса, тогда он будет возвращать пустой массив (или пустую строку), который будет оценивать if(!isLoggedIn())
.
Да, вы можете, конечно, объединить такую функциональность. Простой, когда пользователь не существует, вы возвращаете false, и вы возвращаете userdata, если пользователь существует, и вы можете использовать его, как вы показали в своем вопросе
На самом деле, если это возможно, вы должны это сделать, потому что легче изменить и сохранить код в случае каких-либо изменений.
Есть одна вещь, которую вы должны учитывать – если вы выполняете какие-либо операции в этих функциях, которые могут повлиять на вашу производительность, например запрос базы данных. Вероятно, вы должны использовать какой-то кеш в этом случае, но если вы не будете каждый раз проверять, зарегистрирован ли пользователь, вы будете запрашивать базу данных, чтобы получить данные пользователя / сделать какие-либо проверки в базе данных, и это может быть некоторой потерей для вашей производительности.