在 PHP 中,可以指定参数类型,尽管他们称之为类型提示。
我正在实现一个接口(interface),其中一个函数指定一个数组作为参数类型:
function myFunction(array $argument){
}
我想定义一个类,它的实例可以用作此函数的参数。换句话说,它将扩展 ArrayObject 或实现 ArrayAccess 或类似的东西。
是否有内置接口(interface)或抽象类可以用于此目的? (ArrayObject 没有)
最佳答案
这是不可能的。 array()
不是任何类的对象。因此,它无法实现任何
接口(interface)(参见here)。所以你不能互换使用对象和数组。解决方案很大程度上取决于您想要实现的目标。
为什么不更改函数签名以仅允许 ArrayObject
、ArrayIterator
、ArrayAccess
、IteratorAggregate
、Iterator
或 Traversable
(取决于您想在函数内执行的操作)?
如果您必须依赖所传递对象的交互功能,您应该使用 Traversable
作为类型提示。这将确保该对象可以与 foreach() 一起使用。如果您需要对对象进行类似数组的键访问(例如 $test['test']
),您应该使用 ArrayAccess
作为类型提示。但如果您需要传递的对象属于特定的自定义类型,请使用自定义类型作为类型提示。
另一种选择是根本不使用类型提示,并确定函数体内传递的参数的类型并相应地处理参数(或抛出 InvalidArgumentException
或类似的东西) .
if (is_array($arg)) { ... }
else if ($arg instanceof Traversable) { ... }
else if ($arg instanceof ArrayAccess) { ... }
else {
throw new InvalidArgumentException('...');
}
关于php - 实现 PHP 接口(interface),以便对象实例可以作为数组类型参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/944245/