dte*_*ech 17 php arrays php-7.1
我有一个相对简单的功能,它使用了一个 foreach
function foo($t) {
     $result;
     foreach($t as $val) {
         $result = dosomething($result, $val);
     }
     return $result;
}
Run Code Online (Sandbox Code Playgroud)
我想输入提示,Traversable似乎是我需要的确切类型提示
 function foo(Traversable $t) {
Run Code Online (Sandbox Code Playgroud)
然而,这给出了E_RECOVERABLE_ERROR使用数组时(当然可以在a中使用foreach):例子
 Argument 1 passed to foo() must implement interface Traversable, array given
Run Code Online (Sandbox Code Playgroud)
有没有办法输入提示或这是不可能的?
有一个错误:#41942.关闭为'不是错误'.由于PHP数组是不是对象,他们无法实现一个接口和这样一个没有办法输入提示都array和Traversable.
您可以使用iterator_to_array,ArrayIterator或省略类型提示.请注意,iterator_to_array会将整个迭代器复制到一个数组中,因此可能效率低下.
// These functions are functionally equivalent but do not all accept the same arguments
function foo(array $a) { foobar($a); }
function bar(Traversable $a) { foobar($a); }
function foobar($a) {
    foreach($a as $key => $value) {
    }
}
$array = array(1,2,3)
$traversable = new MyTraversableObject();
foo($array);
foo(iterator_to_array($traversable));
bar(new ArrayIterator($array));
bar($traversable);
foobar($array);
foobar($traversable);
Run Code Online (Sandbox Code Playgroud)