Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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 在类内处理验证_Php_Class - Fatal编程技术网

Php 在类内处理验证

Php 在类内处理验证,php,class,Php,Class,我试图创建一个类来处理来自其他类的所有错误,并将它们存储到会话中 它看起来像这样: class ErrorMessages { public function add { add message to _SESSION } public function display() { display _SESSION messages } } 哪种方法是将此与我的其他类集成的最佳方法 假设我有一个类用户: class User {

我试图创建一个类来处理来自其他类的所有错误,并将它们存储到会话中

它看起来像这样:

class ErrorMessages {

    public function add {
        add message to _SESSION
    }

    public function display() {
        display _SESSION messages
    }

}
哪种方法是将此与我的其他类集成的最佳方法

假设我有一个类用户:

class User {
    function login() {
        if(everything is ok) {
            login
            add ok message to _SESSION  
        }
        else {
            add error to _SESSION
        }
    }
}
我的用户类应该扩展ErrorMessages吗

class User extends ErrorMessages {
      bla bla bla
}
我应该将ErrorMessages对象传递给用户类构造函数吗

$error = new ErrorMessages();

class User {
          function __construct($error) {
    }
}
我应该在我需要的每个类中创建一个ErrorMessages obj吗

__

最佳做法是什么?我计划在验证数据的每个类中使用ErrorMessages类,并使用它从前端视图访问会话消息


是否有其他处理验证的实践?

我不知道这里是否有一个最佳实践,但一个好的实践是:

  • 创建一个可以收集消息的类或接口,比如ErrorMessages类
  • 将该类的实例传递给其他类
  • 创建可以读取错误消息并显示它们的其他类
原因是单一责任原则。根据具体情况,显示消息的方式可能会有所不同。你收集它们的方式也一样。因此,如果您只有一个抽象类或接口来定义收集器,则可以创建任何类型收集器的实例并将其传递给该类。这样,您也可以使用日志文件收集器,如果您根本不想收集错误,也可以使用nullcollector

处理这些错误也是如此。您可能有一个向用户显示错误并让用户更正信息的处理器,但也可以有一个仅将错误存储在文件中的处理器,或对其应用一些AI更正

所有这些现在可能都不相关,但通过保持这种结构,您可以轻松地测试应用程序,并在需要时对其进行更改


从ErrorMessages扩展不是一个好主意。将有很多基本功能,构建包含所有这些信息的基类是不可管理的。

如果您想要一个将元素保存到会话的类,可以使用一个带有静态方法的类:

ErrorMessagesClass::storeInSession("$message");
ErrorMessagesClass::getMessages();
这是你现在需要的。 但取决于你将来想要什么,还有其他的可能性

带有数据映射器的错误模型对象有助于保持适应性。
一个对象用于管理信息,另一个对象用于存储信息。

最佳做法是为您的应用程序提供足够灵活和安全的任何解决方案。 虽然在会话中存储验证错误的想法是值得怀疑的,因为它实际上只是另一种形式的全局状态,并且会使测试复杂化。 给猫剥皮的方法有很多:

处理模型中的验证并存储错误 在模型上的散列(PHP中的数组)中。如果验证失败,则将模型传递回呈现错误消息的视图。 可以创建一个存储在会话中的表单,通知用户该表单无效

采用另一种方法,将输入参数绑定到处理验证然后可以呈现表单的
FormBuilder