我一直在寻找什么是处理函数错误的最佳方法。 “DIE”方法是否合适?
即。 php函数调用另一个,例如:
function login(){
$result = verifyDetails("bob", "password123");
if($result == "accepted"){
echo "Welcome bob";
}else{
echo "Error!! \n";
echo $result;
}
}
function verifyDetails($user, $pass){
if(empty($user) || empty($pass)){
die("cannot be empty");
}
if($user == "bob" && $pass == "password"){
return "accepted";
}else{
die("username or password incorrect");
}
}
“DIE”方法是返回消息还是一切都停止了?
提前致谢
更新
如果输出未知怎么办?
例如,。在上面的例子中,我把“接受”作为唯一正确答案。
如果返回的是姓名或身份证号码怎么办?那么你就无法真正区分错误和正确的回报。
再次感谢。更新/可能的解决方案
function login(){
$result = verifyDetails("bob", "password123");
if($result[0] == "SUCCESS"){
echo "Welcome bob";
}else if($result[0] == "ERROR"){
echo "Error!! \n";
echo $result;
}else{
echo "Unknown Error!!";
}
}
function verifyDetails($user, $pass){
$msg = array();
if(empty($user) || empty($pass)){
$msg[0] = "ERROR";
$msg[1] = "cannot be empty"
return $msg;
}
if($user == "bob" && $pass == "password"){
//say $customerID is extracted from a db
$msg[0] = "SUCCESS";
$msg[1] = $customerID
return $msg;
}else{
$msg[0] = "ERROR";
$msg[1] = "username or password incorrect"
return $msg;
}
}
想法&欢迎提出有关上述“可能”解决方案的建议
更新
使用数组
检查Shikiryu update 2 answer for a clean version答案 0 :(得分:1)
在您的情况下,唯一可接受的方式是return FALSE
如果这些函数实际上是某些类的方法,请使用类变量来存储实际错误。 如果这些函数不属于任何类,我根本不会使用它们,而是用普通代码写
if($user == "bob" && $pass = "password"){
echo "Welcome bob";
}else{
echo "incorrect username or password");
}
更新回答
没有什么可以发明的。按照PHP的方式:
使函数返回值或FALSE
然而,为了验证目的,你必须这样做:
function validSomething($val){
return (bool)rand(0,1);
}
$err = array();
if (!validSomething($var)) {
$err[] = "Whatever error";
}
即。 function只返回布尔值和应用程序逻辑添加的实际错误消息。
但是,在您的示例中,用户定义的函数完全被滥用。
答案 1 :(得分:1)
die()
只需echo
您的消息并停止播放脚本,因为die()是exit()的别名。
在您的情况下,由于密码不是password
而是password123
,因此脚本将停止仅显示“用户名或密码不正确”。
但正如我在这里看到的那样,你需要一个return "cannot be empty";
,以便显示:
错误! 用户名或密码不正确
(以及die()
不会的其余html
更新2(丑陋的方式):
function login(){
$result = verifyDetails("bob", "password123");
if(isset($result['success']){ // verifyDetails return true?
echo $result['success'];
}else{
echo "Error!! \n";
echo $result['error']; // Display the error verifyDetails throws
// You may want to check if $result['error'] exists.
}
}
function verifyDetails($user, $pass){
if(empty($user) || empty($pass)){
return array('error'=>"cannot be empty");
}
if($user == "bob" && $pass == "password"){
return array('success'=>"Welcome bob");
}else{
return array('error'=>"username or password incorrect");
}
}
答案 2 :(得分:1)
die
终止在调用它的行上执行PHP脚本。因此,您的消息将不会被退回。
您可能只想使用return
代替die
;
答案 3 :(得分:1)
是的,您可以使用die()
进行调试。
does the "DIE" method return the message or does everything come to a standstill?
是的,它会返回错误消息,是的,脚本将停止继续。