используя ту же функцию для двух целей

У меня есть функция, называемая 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, если пользователь существует, и вы можете использовать его, как вы показали в своем вопросе

На самом деле, если это возможно, вы должны это сделать, потому что легче изменить и сохранить код в случае каких-либо изменений.

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