当不允许向数组中添加时,正确的异常类型


Correct exception type for adding to an array when it isn't allowed?

假设我有一个实现ArrayAccess的类,但不允许添加新数据。您可以设置已经存在的值,但不能添加大小。

$arrayAccessible[1] = new StdClass(); //okay
$arrayAccessible[] = new StdClass(); //should throw an exception

我应该抛出什么异常类型?我确实有可用的SPL异常类型,如果有意义的话应该使用它们。我能想到的最好的可能是BadFunctionCallExceptionBadMethodCallException

如果没有一个好的扔,也许我会做UnsupportedOperationException或类似的。然而,这绝对不是我想做的事情。

老实说,我会抛出OverflowException。由于数组是固定的,因此根据定义它也是完整的……

我认为UnsupportedOperationException已经足够好了——它很好地描述了发生的问题,其他开发人员应该能够很容易地找出发生了什么。如果你不确定或者想要更具体,创建你自己的异常。

同样,如果我想让字段只读,我可能不会使用ArrayAccess(除非你正在使用遗留代码)。getter应该可以解决这个问题。如果你想迭代对象的属性,实现Iterator接口