PHP возвращает сообщение об ошибке и false
у меня есть очень простая функция PHP для проверки входа в систему
function check_login($user, $pass) {
if(!isset($user) || $user == '') {
return 'Please enter a valid username';
}
else if(!isset($pass) || $pass == '') {
return 'Please enter a valid password';
}
else {
return 'true';
}
}
как я могу вернуть сообщение об ошибке и false в то же время и вернуть true вместо "true" в качестве строки. Как,
function check_login($user, $pass) {
if(!isset($user) || $user == '') {
return 'Please enter a valid username' //return false;
}
else if(!isset($pass) || $pass == '') {
return 'Please enter a valid password' //return false;
}
else {
return true;
}
}
так что я могу проверить как if(check_login($uname, $pword)){
вместо того, чтобы проверить, как if(check_login($uname, $pword)=='true'){
:)
6 ответов
почему бы просто не проверить, если это true
, и ручки оттуда.
$login = check_login('user', 'pass');
if($login === true)
loginUser(); //login was successful, finalize or whatever
else
echo $login; //error message
другой метод, который вы могли бы использовать, - установить сообщение об ошибке внутри класса и вызвать функцию для его извлечения позже.
class exampleClass {
private $error_message = '';
function exampleFunction($argument) {
if($argument == 'lemons') {
return true;
} else {
$this->error_message = 'Argument was not lemons.';
return false;
}
}
function getErrorMessage() {
return $this->error_message;
}
}
$example_session = new exampleClass();
if( ! $example_session->exampleFunction('apples') )
echo $example_session->getErrorMessage();
почему бы не попробовать бросать исключение
function check_login($user, $pass) {
if (empty($user)) {
throw new InvalidArgumentException('Please enter a valid username');
}
if (empty($pass)) {
throw new InvalidArgumentException('Please enter a valid password');
}
return true
}
// snip
try {
check_login($userValue, $passValue);
} catch (Exception $e) {
// an error occurred
echo $e->getMessage();
}
Я знаю, это довольно старый пост, но, он получает много отзывов. Поэтому позвольте мне просто добавить еще один ответ к великим ответам здесь.
одним из решений было бы передать переменную по ссылке, такой как стиль PHP. пример
псевдо код:
функции
//Notice the '&' before the variable name.
function check_login($user, $pass, &$message) {
if(!isset($user) || $user == '') {
$message["status"] = false; //fail
$message["message"] ='Please enter a valid username';
}
elseif(!isset($pass) || $pass == '') {
$message["status"] = false; //fail
$message["message"]= 'Please enter a valid password';
}
elseif (isset($pass) || $pass != ''){
$message["status"] = true; //success
$message["message"]= 'Username and password are valid';
return true;
}
return false;//you can return from within the if condition if you wish
}
Звонок:
/* $message variable will be assigned and populated in the function check_login() */
$message = array();
if(check_login($uname, $pword, $message) === true )
{
//Do your stuff here
//@message array is avaialble
echo message["message"];
}
else
{
//means false
echo message["message"];
}
вы можете использовать Echo и вернуть как:
function check_login($user, $pass) {
if(!isset($user) || $user == '') {
echo "Please enter a valid username";
return false;
}
else if(!isset($pass) || $pass == '') {
echo "Please enter a valid password";
return false;
}
else {
return true;
}
}
вы можете использовать переменные вместо echo или return, что намного безопаснее, чем echo - скажем, если вы хотите запустить эту функцию в заголовке html или даже до этого - что вы увидите текст, который генерируется еще до загрузки веб-сайта.
вместо этого используйте переменные !
function check_login($user, $pass) {
if(!isset($user) || $user == '') {
$var = "Please enter a valid username";
$var = array();
$var['msg'] = "Please enter a valid username";
$var['error'] = "false";
return $var;
}
else if(!isset($pass) || $pass == '') {
$var = array();
$var['msg'] = "Please enter a valid username";
$var['error'] = "false";
return $var;
}
else {
return true;
}
}
вот как вы можете использовать оба в одно и то же время, где бы вы ни хотели показать ошибку, используйте переменную и где бы вы ни хотели проверить оператор, проверьте его по true и ложь.
где бы вы ни хотели использовать переменную $var с ошибкой msg, используйте это -
echo $var['msg'];
и когда вы хотите проверить ложных использовать
$var['error'] == 'false'