Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP函数赢得';t打印带有变量的消息_Php_Function_Variables - Fatal编程技术网

PHP函数赢得';t打印带有变量的消息

PHP函数赢得';t打印带有变量的消息,php,function,variables,Php,Function,Variables,所以我试图创建一些错误消息,代码如下所示: function callError($errorcode, $attempts) { $errormessage = array( "0" => "Du har angivit fel lösenord, du har ". $attempts ." försök kvar. Kontrollera att du har skrivit rätt användarnamn.", "1" => "Di

所以我试图创建一些错误消息,代码如下所示:

function callError($errorcode, $attempts) {
    $errormessage = array(
        "0" => "Du har angivit fel lösenord, du har ". $attempts ." försök kvar. Kontrollera att du har skrivit rätt användarnamn.",
        "1" => "Ditt konto har låsts, kontakta webmaster för att återställa det.",
        "2" => "Användare finns inte, kontrollera att du har skrivit rätt användarnamn."
    );

    return $errormessage[$errorcode];
}
但当我运行第一条错误消息时,它不起作用,甚至不会显示。另一方面,当我运行另外两个时,它工作得完美无缺!我试图返回一个包含$errormessage和$attempts的数组,但这也不起作用

我在这里做错了什么?

确保索引是字符串 加


作为func中的第一行,这似乎是变量类型的问题

确保你在这方面是一致的。例如,让我们决定希望值为
int

function callError($errorcode, $attempts) {

    $errorcode = (int) $errorcode;
    $errormessage = array(
        0 => "Du har angivit fel lösenord, du har ". $attempts ." försök kvar. Kontrollera att du har skrivit rätt användarnamn.",
        1 => "Ditt konto har låsts, kontakta webmaster för att återställa det.",
        2 => "Användare finns inte, kontrollera att du har skrivit rätt användarnamn."
    );

    return $errormessage[$errorcode];
}

试着使用带有后备安全机制的开关

function callError($errorcode, $attempts) {
    $output = '';

    switch((int)$errorcode) {
        case 0:
            $output = 'Du har angivit fel lösenord, du har '. $attempts .' försök kvar. Kontrollera att du har skrivit rätt användarnamn.';
            break;
        case 1:
            $output = 'Ditt konto har låsts, kontakta webmaster för att återställa det.';
            break;
        case 2:
            $output = 'Användare finns inte, kontrollera att du har skrivit rätt användarnamn.';
            break;
        default:
            $output = 'SOMETHING WENT WRONG [CUSTOM MESSAGE]'.$errorcode.' : '.$attempts;
            break;
    }

    // Do something more here with your error handling if needed

    // Return the output message
    return $output;
}

这将强制typecast
$errorcode
为整数。但是对于
默认值
情况来说,这并不重要,但是它将排除字符串
中整数的问题
“1”

提示:将其更改为
开关()
语句:

函数调用者错误($errorcode,$truments){
开关($errorcode){
案例0:
返回“Du har angivit felösenord,Du har”。$attempts.“försök kvar.Kontrollera att Du har skrivit rätt användarnamn.”;
案例1:
返回“Ditt konto har låsts,kontakta网站管理员för attåterstålla det.”;
案例2:
返回“一个芬兰人的家庭,一个家庭,一个家庭。”;
违约:
返回“无关联错误”;
}
}

答案就是删除数组中的字符串


请参阅@fedorqui评论

如何使其关联,但不将数字作为字符串?意思是
0=>array(),1=>array()…
去掉@fedorqui所说的数字,并告诉我们如何调用此函数您可能会在
callError()函数中得到一个
$errorcode
,而该函数不是
0
1
2
或它不符合从
整数到
字符串的类型转换。使用try-catch-throw机制要好得多:)
var\u dump($errorcode)
…@fedorqui这就是解决方案,非常感谢!我想我已经很累了。那就确保数字不是字符串吧,因为这是最简单的选择。这是非常古老的PHP。不幸的是,这不是解决他的问题的安全方法。最好是他处理
切换案例
,并有一个
默认值
。@Allendar,我同意,只是提供了一个解决方案。转换听起来是杰克想要的更好的方式。
function callError($errorcode, $attempts) {
    $output = '';

    switch((int)$errorcode) {
        case 0:
            $output = 'Du har angivit fel lösenord, du har '. $attempts .' försök kvar. Kontrollera att du har skrivit rätt användarnamn.';
            break;
        case 1:
            $output = 'Ditt konto har låsts, kontakta webmaster för att återställa det.';
            break;
        case 2:
            $output = 'Användare finns inte, kontrollera att du har skrivit rätt användarnamn.';
            break;
        default:
            $output = 'SOMETHING WENT WRONG [CUSTOM MESSAGE]'.$errorcode.' : '.$attempts;
            break;
    }

    // Do something more here with your error handling if needed

    // Return the output message
    return $output;
}