如何返回错误数组并迭代它?

问题描述 投票:0回答:4

我有index.php和function.php。

在index.php中我已经包含了function.php

在index.php中我调用存在于function.php中的

login("Bla","123");

在index.php中我有一个

if (!empty($err)){ foreach(..) echo $err ... }

login() 应该返回一个名为 $err 的数组,(带有 return $err; )如果有任何错误,然后它应该在 index.php 的 foreach 中回显它..

但不知何故我无法让它工作。你不能这样做吗?我没有得到任何回报。

我在登录()中:

$err = array();
$err[] = "Something went wrong";
return $err;
exit();

这里出了什么问题?或者还有其他解决方案吗?

php arrays return
4个回答
3
投票

return
return 返回 $err
value
。它不会使变量
$err
全局可用。

尝试使用:

$err = login('Bla', '123');

1
投票

exit()
替换为 just
return;

function login()
{
    //Blah
    exit();
}
login();

echo 'You shall never see this.';

这就是你应该做的:

$errors = array();
function login($user,$pass)
{
    global $errors;
    if(empty($user) || empty($pass))
    {
        $errors[] = "username / Password invalid";
    }

    //More Checks

    //at the end.
    if(count($errors) == 0) /*no errors*/
    {
        return true;
    }
}

然后在你的

index.php

if(!login("user","pass"))
{
    foreach($errors as $error)
    {
        echo $error . "<br />";
    }
    exit();
}

//Successful login

0
投票

我建议阅读变量范围: http://www.php.net/manual/en/language.variables.scope.php

根据您所说的,您尝试从一个作用域返回一个变量,并在另一个作用域中使用相同的名称使用它,但没有显式设置它。

function login() {
    $var = 123;
    return $var;
}

login(); // $var won't exist.
$abc = login(); // To login() it is called $var
// but here $abc has the same value as $var inside of login() because it was returned.
// not because it has the same name.

0
投票

我已经添加了一个答案,但我认为我会添加另一种描述 OOP 方法来做到这一点。

创建一个名为

login.class.php
的文件并创建一个像这样的类

class Login
{
    var $username,$password;

    public function __cosntruct($username,$password)
    {
        $this->username = $username;
        $this->password = $password;
    }

    //Checks
    public function isValidUsername()
    {
       return strlen($this->username) > 8;
    }

    //..Etc
}

然后你可以这样做:

$Login = new Login("Username","Password");

if(!$Login->isValidUsername())
{
    echo 'username invalid';
}
© www.soinside.com 2019 - 2024. All rights reserved.