PHP,例外

PHP,例外,php,exception-handling,Php,Exception Handling,我正在研究W3学校的例外情况,在标题前的链接中: 重新抛出异常 有一句话是这样说的: 如果引发的异常属于customException类,则 没有customException捕获,只有基本异常捕获 例外情况将在那里处理 如果有人能为这句话给我举个例子,我将非常感谢。基本上,他们是说,如果没有设置catch语句来捕获customException,那么它将落入常规Exception catch语句 在本例中,第一个catch语句将捕获customException,因为它显式地设计用于捕获cus

我正在研究W3学校的例外情况,在标题前的链接中:

重新抛出异常

有一句话是这样说的:

如果引发的异常属于customException类,则 没有customException捕获,只有基本异常捕获 例外情况将在那里处理


如果有人能为这句话给我举个例子,我将非常感谢。

基本上,他们是说,如果没有设置catch语句来捕获customException,那么它将落入常规Exception catch语句

在本例中,第一个catch语句将捕获customException,因为它显式地设计用于捕获customException

try {
    // fail
    throw new customException();
}
catch (customException $e) {
    // catch custom exception
}
catch (Exception $e) {
    // catch any uncaught exceptions
}
在下一个示例中,由于该子句缺少泛型异常捕获块,因此将捕获它:

try {
    // fail
    throw new customException();
}
catch (Exception $e) {
    // catch any uncaught exceptions
}

看一看PHP手册中的示例2


w3schools并不是学习PHP的最佳场所,它的错误臭名昭著

如果您有一个自定义异常,它定义为

类CustomException扩展了异常

现在,在代码中的某个地方:

try
  {
  // do something that throws a CustomException
  }

catch(Exception $e) // you are only catching Exception not CustomException,
// because there isn't a specific catch block for CustomException, and
// because Exception is a supertype of CustomException, the exception will 
// still be caught here.
  {
  echo 'Message: ' .$e->getMessage();
  }
所以它的意思是,因为CustomException是Exception的子类,只要捕捉到超类的异常类型,而没有更具体的子类类型的catch块,它仍然会被捕捉到,在示例中有两个catch块。第一种方法只捕获自定义异常;下一个捕获任何异常。如果第一个街区抓到任何东西,你就永远无法到达第二个街区。但是因为customException也是异常的一个例子,如果我们没有第一个catch块,它就会在那里被捕获。这样,第一个捕获捕获到它,而执行永远不会到达第二个捕获


同时,请阅读我在上面发布的链接,以及为什么w3schools是个坏主意。

了解此网站,所有人谢谢,我将阅读您的答案谢谢。这毫无意义,它是否特别适用于例外情况?不完全是,您在这里看到的只是一种多态形式。但当您扩展例如:类a扩展类b,如果我从类a创建对象,我无法访问类b属性/方法。我了解了多态性,它看起来是一样的,但是没有任何意义。你能扩展吗?如果类a扩展了b,如果你创建了类a的实例,那么你应该能够访问类b方法。另一种方法是不起作用的,这意味着从类b的实例中,不能调用子类的方法。原因很简单。子类a知道其父类的方法。但是b班根本不知道a班的存在,所以现在你说“谢谢你,祝你有美好的一天”是有道理的。