Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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_Design Patterns_Factory_Factory Pattern - Fatal编程技术网

Php 工厂方法-要抛出什么异常

Php 工厂方法-要抛出什么异常,php,design-patterns,factory,factory-pattern,Php,Design Patterns,Factory,Factory Pattern,我有一个非常简单的工厂方法,它根据传递给它的一些配置值和条件创建一个模型实例 我不确定的是,如果工厂无法基于其接收的配置创建模型实例,该怎么办 第一个问题是,它应该返回false还是null?还是应该抛出异常 如果它应该抛出一个异常,那么这应该是什么异常呢。我在这里用PHP工作(PHP例外列表)你是唯一能回答这个问题的人。应该发生的事情在任何地方都没有定义 如果你问我,我更愿意抛出一个异常,如果你愿意,可以称之为YourFactory\u ClassNotFoundException。这将使调用

我有一个非常简单的工厂方法,它根据传递给它的一些配置值和条件创建一个模型实例

我不确定的是,如果工厂无法基于其接收的配置创建模型实例,该怎么办

第一个问题是,它应该返回false还是null?还是应该抛出异常


如果它应该抛出一个异常,那么这应该是什么异常呢。我在这里用PHP工作(PHP例外列表)

你是唯一能回答这个问题的人。应该发生的事情在任何地方都没有定义

如果你问我,我更愿意抛出一个异常,如果你愿意,可以称之为
YourFactory\u ClassNotFoundException
。这将使调用代码看起来更简单,因为它不需要测试返回值


据我所知,PHP核心函数和类对此有以下共识:

  • false
    应由遇到错误且不引发异常的方法返回。(并且没有类似于
    is_file()
    的布尔返回值)。这些方法需要设置
    errno
    errmsg
    ,以便用户有机会获取错误消息

  • 在这种情况下,一些较新的PHP类将抛出异常。我更喜欢库代码的例外情况

  • 如果它是一个没有返回语句的void方法,则返回
    null
    。这可能是有条件的


    • 你是唯一能回答这个问题的人。应该发生的事情在任何地方都没有定义

      如果你问我,我更愿意抛出一个异常,如果你愿意,可以称之为
      YourFactory\u ClassNotFoundException
      。这将使调用代码看起来更简单,因为它不需要测试返回值


      据我所知,PHP核心函数和类对此有以下共识:

      • false
        应由遇到错误且不引发异常的方法返回。(并且没有类似于
        is_file()
        的布尔返回值)。这些方法需要设置
        errno
        errmsg
        ,以便用户有机会获取错误消息

      • 在这种情况下,一些较新的PHP类将抛出异常。我更喜欢库代码的例外情况

      • 如果它是一个没有返回语句的void方法,则返回
        null
        。这可能是有条件的


      抛出一个
      InvalidArgumentException
      将是我的建议抛出一个
      InvalidArgumentException
      将是我的建议我知道,在某种程度上你是正确的。但对于如何最好地处理这种情况,必须达成一些共识。谢谢你关于例外情况的建议,我认为这也是最好的。我已经写了几行关于这一点的文章。我知道,在某种程度上你是正确的。但对于如何最好地处理这种情况,必须达成一些共识。谢谢你关于例外的建议-我认为这也是最好的,我已经写了几行关于这一点的文章。