全局变量(类似 C)
如果您使用静态类型语言进行编程,您可能会使用全局变量来显示错误消息(这会污染您的全局命名空间):
global $login_error_message;
function login($user, $password)
{
if(success)
return true;
if(failure)
{
global $login_error_message;
$login_error_message = 'Error message';
return false;
}
}
if(login($user, $password))
redirect
else
{
global $error_message
echo $error_message;
}
成员变量(类似 C++)
这在逻辑上与全局变量相同,但不受污染问题的影响:
class LoginClass
{
private $error_message;
function login($user, $password)
{
if(success)
return true;
if(failure)
{
$this->error_message = "Error message";
return false;
}
}
function get_error_message()
{
return $this->error_message;
}
}
$loginInstance = new LoginClass();
if($loginInstance->login($user, $password))
redirect
else
echo $loginInstance->get_error_message();
通过引用传递(类似 C/++)
使用通过引用传递的附加参数来返回错误代码(这给函数调用增加了额外的复杂性):
function login($user, $password, &$error_msg)
{
if(success)
return true;
if(fail)
{
$error_msg = 'Error message';
return false;
}
}
$error_message
if(login($user, $password, $error_message))
redirect
else
echo $error_message;
混合返回类型
但由于这是 php(所以不是静态类型),您可以执行以下操作:
成功时返回 true (我认为不需要特殊输出),否则返回错误消息。使用该功能时,您会遇到类似的事情:
function login($user, $passord)
{
if(success)
return true;
if(failure)
return "Error message";
}
$login_result = login($user, $password);
if($login_result === true)//note the ===, as == would be true on non empty strings too
success
else
echo $login_result;
返回关联数组
当然你也可以返回一个包含两个值的数组:
function login($user, $password)
{
if(success)
return array("success" => true, "error_msg" => "");
if(failure);
return array("success" => false, "error_msg" => "Error message");
}
$login_result = login($user, $password);
if($login_result['success'])
redirect
else
echo $login_result['error_message'];
返回类实例(类似 C/++)
同样,您可以使用这样的结构:
class LoginReturn
{
public $success;
public $error_message;
LoginReturn($success, $error_mesage)
{
$this->success = $success;
$this->error_message = $error_message;
}
};
function login$user, $password)
{
if(success)
return new LoginReturn(true, "");
if(failure)
return new LoginReturn(false, "Error message");
}
$login_result = login($user, $password);
if($login_result->success)
redirect
else
echo $login_result->error_message;
结论
鉴于这些例子,我认为人们可以看到它们的优点和缺点。就我个人而言,我会使用 Member 变量变体,因为它为使用相同错误消息基础结构的更多函数提供了空间,只需将它们放入类中即可。