首页 > 解决方案 > PHP 在数组中显示完整的错误列表

问题描述

我使用 OOP,我想问你们这将如何完成!我一直在尝试,但仍然无法正常工作;(
这是我的类文件:

class Signup {
    // Error
    public $error = array();
    public function validate($username, $email_mobile, $password) {
        if(!empty($username) || !empty($email_mobile) || !empty($password)){
            if(strlen($username) < 3 || strlen($username) > 50){
                $this->error = "Username is too short or too long!";
                return $this->error;
            }elseif(strlen($email_mobile) < 3 || strlen($email_mobile) > 50) {
                $this->error = "Email is too short or too long!";
                return $this->error;
            }elseif(strlen($password) < 3 || strlen($password) > 50){
                $this->error = "Password is too short or too long!";
                return $this->error;
            }
        } else {
            $this->error = "Please fill are required feilds";
            return $this->error;
        }
    }

这是我的注册文件

$error[] = $signup->validate($username, $email_mobile, $password);
        <?php 
        // require('lib/function/signup.php');
        if(isset($error)){
            var_dump($error);
            foreach ($error as $value) {
                echo $value . "<br>";
            }
        }
        ?>

我知道我在同一个文件中调用 $error 而不是属性错误。但我不知道如何将此数组发送到另一个文件!请帮我!我也调用了所有东西,问题只是我的代码(我认为),我只包含了我的文件并制作了一个 var 来调用我的注册类

标签: phpoop

解决方案


  1. 在您的开发生涯中,学习编码标准永远不会太早。直接跳到 PSR-12,并采用所有这些准则来编写漂亮、专业的代码。

  2. 尽可能在您的类中使用数据类型声明,这将提高整个项目的数据完整性。

  3. 您似乎更喜欢返回一系列错误。出于这个原因,我认为在类属性中长期缓存错误没有任何好处。这种编码风格很好,但您可以选择不返回任何内容 ( void) 而是填充类属性$errors,然后在$signup->validate()调用后直接访问它 via$signup->errors或使用 getter 方法。

  4. empty()检查在流程中为时已晚。将值传递给类方法后,必须已经声明了这些值。出于这个原因empty(),检查单纯的“虚假”是不必要的开销。只需检查值的字符串长度。

  5. 您的数据质量检查似乎有点不成熟(电子邮件和密码检查应该更复杂),但我不会将您与任何新的复杂性混淆,但我确实希望您的验证规则会随着您意识到用户不可信而增加将良好的价值观置于形式中,而不是被迫这样做。出于这个原因,使用循环检查值长度可能是不明智的,因为您最终需要为某些值编写单独的规则。

一个可能的写法:

class Signup
{
    public function validate(
        string $username,
        string $email,
        string $password
    ): array
    {
        $errors = [];
        $usernameLength = strlen($username);
        if ($usernameLength < 3 || $usernameLength > 50) {
            $errors[] = "Username must be between 3 and 50 characters";
        }
        $emailLength = strlen($email);
        if ($emailLength < 3 || $emailLength > 50) {
            $errors[] = "Email must be between 3 and 50 characters";
        }
        $passwordLength = strlen($password);
        if ($passwordLength < 3 || $passwordLength > 50) {
            $errors[] = "Password must be between 3 and 50 characters";
        }
        return $errors;
    }
}

调用此方法时...

$signup = new Signup();
$errors = $signup->validate(
    $_POST['username'] ?? '',
    $_POST['email'] ?? '',
    $_POST['password'] ?? ''
);
if ($errors) {
    echo '<ul><li>' . implode('</li><li>', $errors) . '</li></ul>';
} else {
    echo 'No errors';
}

推荐阅读