DomainException 类

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

介绍

如果一个值不符合定义的有效数据域,则抛出此异常。

类概要

class DomainException extends LogicException {
/* 继承的属性 */
protected string $message = "";
private string $string = "";
protected int $code;
protected string $file = "";
protected int $line;
private array $trace = [];
private ?Throwable $previous = null;
/* 继承的方法 */
public Exception::__construct(string $message = "", int $code = 0, ?Throwable $previous = null)
final public Exception::getCode(): int
final public Exception::getFile(): string
final public Exception::getLine(): int
final public Exception::getTrace(): array
}
添加注释

用户贡献的注释 4 条注释

mateusz dot charytoniuk at gmail dot com
12 年前
<?php
function renderImage($imageResource, $imageType)
{
switch (
$imageType) {
case
'jpg':
case
'jpeg':
header('Content-type: image/jpeg');
imagejpeg($imageResource);
break;
case
'png':
header('Content-type: image/png');
imagepng($imageResource);
break;
default:
throw new
DomainException('Unknown image type: ' . $imageType);
break;
}
imagedestroy($imageResource);
}
?>
ja2016 at wir dot pl
7 年前
我认为这种异常非常适合在预期参数、值等的类型是正确的,但其值超出域时抛出。看看 RangeException
>>抛出此异常以指示程序执行期间的范围错误。通常这意味着发生了除了下溢/上溢之外的算术错误。这是 DomainException 的运行时版本。<<
因此,这种异常是为逻辑错误而设计的

当数据类型错误时,更好的方法是抛出 InvalidArgumentException。

<?php
// 在这里,使用 InvalidArgumentException
function media($x) {
switch (
$x) {
case
image:
return
'PNG';
break;
case
video:
return
'MP4';
break;
default:
throw new
InvalidArgumentException ("Invalid media type!");
}
}
?>
这与这种情况完全不同
<?php
// 在这里,使用 DomainException
$object = new Library ();
try {
$object->allocate($x);
} catch (
toFewMin $e) {
throw new
DomainException ("Minimal value to allocate is too high").
}
?>
类似的情况,但问题发生在运行时
<?php
class library {
function
allocate($x) {
if (
$x<1000)
throw new
RangeException ("Value is too low!")
}
}
?>
总结:DomainException 对应于 RangeException,我们应该在类似的情况下使用它们。但第一个异常是在我们确信问题出在我们项目、第三方元素等(简单来说:逻辑错误)时设计的,第二种方式是在我们确信问题出在输入数据或环境(简单来说:运行时错误)时设计的。
chmielewski dot thomas at gmail dot com
9 年前
<?php

function divide($divident, $divisor) {
if(!
is_numeric($divident) || !is_numeric($divisor)) {
throw new
InvalidArgumentException("函数仅接受数值类型");
}
if(
$divisor == 0) {
throw new
DomainException("除数不能为零");
}
return
$divident / $divisor;
}
Cruiser
6 年前
引用:“在数据管理和数据库分析中,数据域是指数据元素可能包含的所有值。”

来源:https://en.wikipedia.org/wiki/Data_domain

这个异常让我有点困惑,DataDomainException 或 DataTypeException 可能更具描述性。
To Top