如何设置“只读”异常?

问题描述 投票:0回答:2

在 Php 中,我希望我的异常不可变:

readonly class MyImmutableException extends \Exception
{
}

如您所见,这是不可能的,它会导致致命错误,因为 \Exception 不是不可变的。 但我想让我的所有系统都不可改变,所以很糟糕

php immutability
2个回答
0
投票

你不能像现在那样这样做。它是设计的一部分,在只读类的 RFC 的“继承”部分中提到过:

与重写只读属性的工作原理类似,只读类只能扩展只读父级。

因此,您要么继续继承

\Exception

 类,要么应用只读属性。

请注意,您可能根本不需要延长

\Exception

。创建自己的异常基类应该足够了,具有 
readonly
 属性,只要它实现 
\Throwable 契约,你就应该可以很好地滚动。您可以安全地复制 \Exception
 代码,这样就不会重新发明轮子。


0
投票
您可以执行类似的操作并将异常定义为没有任何输入,因此无需更改:

class MyImmutableException extends \Exception { public function __construct(){ parent::__construct(); } }
如果您确实需要,也可以定义一些默认值。如果您没有任何设置器,则没有人可以更改它:

class MyImmutableException extends \Exception { private const MESSAGE = 'I am an example'; private const CODE = 123; public function __construct(){ parent::__construct( self::MESSAGE, self::code ); } }
    
© www.soinside.com 2019 - 2024. All rights reserved.