假设我有一个实现ArrayAccess
的类,但不允许添加新数据。您可以设置已经存在的值,但不能添加大小。
$arrayAccessible[1] = new StdClass(); //okay
$arrayAccessible[] = new StdClass(); //should throw an exception
我应该抛出什么异常类型?我确实有可用的SPL异常类型,如果有意义的话应该使用它们。我能想到的最好的可能是BadFunctionCallException
或BadMethodCallException
。
如果没有一个好的扔,也许我会做UnsupportedOperationException
或类似的。然而,这绝对不是我想做的事情。
老实说,我会抛出OverflowException。由于数组是固定的,因此根据定义它也是完整的……
我认为UnsupportedOperationException
已经足够好了——它很好地描述了发生的问题,其他开发人员应该能够很容易地找出发生了什么。如果你不确定或者想要更具体,创建你自己的异常。
同样,如果我想让字段只读,我可能不会使用ArrayAccess
(除非你正在使用遗留代码)。getter应该可以解决这个问题。如果你想迭代对象的属性,实现Iterator接口