假设我有一个实现ArrayAccess
的类,但不允许添加新数据。您可以设置现有值,但不能添加大小。
$arrayAccessible[1] = new StdClass(); //okay
$arrayAccessible[] = new StdClass(); //should throw an exception
我应该抛出什么异常类型?我确实有可用的SPL异常类型,如果有意义的话应该使用它们。我能想到的最好的可能是BadFunctionCallException
或BadMethodCallException
。
如果没有一个好的投掷,也许我会做UnsupportedOperationException
之类的。但是,这绝对不是我想做的事情。在这个项目中添加起来非常困难。
答案 0 :(得分:6)
老实说,我会扔OverflowException。由于阵列是固定的,因此根据定义也是完整的......
答案 1 :(得分:1)
我说UnsupportedOperationException
足够好了 - 它描述了发生得很好的问题,开发人员应该能够轻松搞清楚发生了什么。如果您不确定或想要更具体,请创建自己的例外。
另外,如果我想让字段只读,我可能不会使用ArrayAccess
(除非您正在使用遗留代码)。吸气者应该做到这一点。如果要迭代对象的属性,请同时实现Iterator interface。