diff --git a/language/types.xml b/language/types.xml index b8f33277ea..9b39530713 100644 --- a/language/types.xml +++ b/language/types.xml @@ -43,7 +43,7 @@ - Three compound types: + Four compound types: @@ -66,6 +66,12 @@ + + + iterable + + + @@ -207,6 +213,7 @@ if (is_string($a_bool)) { &language.types.float; &language.types.string; &language.types.array; + &language.types.iterable; &language.types.object; &language.types.resource; &language.types.null; diff --git a/language/types/iterable.xml b/language/types/iterable.xml new file mode 100644 index 0000000000..f21d32b323 --- /dev/null +++ b/language/types/iterable.xml @@ -0,0 +1,180 @@ + + + + Iterables + + + Iterable is a pseudo-type introduced in PHP 7.1. It accepts any + &array; or object implementing the Traversable + interface. Both of these types are iterable using &foreach; and can be used + with yield from within a generator. + + + + Using Iterables + + + Iterable can be used as a parameter type to indicate that a function + requires a set of values, but does not care about the form of the value set + since it will be used with &foreach;. If a value is not an array or + instance of Traversable, a + TypeError will be thrown. + + + + + + Iterable parameter type example + + + +]]> + + + + + + Parameters declared as iterable may use &null; or an array as a default + value. + + + + + + Iterable parameter default value example + + + +]]> + + + + + + Iterable can also be used as a return type to indicate a function will + return an iterable value. If the returned value is not an array or instance + of Traversable, a TypeError + will be thrown. + + + + + + Iterable return type example + + + +]]> + + + + + + Functions declaring iterable as a return type may also be generators. + + + + + + Iterable generator return type example + + + +]]> + + + + + + + Iterable Type Variance + + + Classes extending/implementing may broaden methods using &array; or + Traversable as parameter types to + iterable or narrow return types from iterable to + &array; or Traversable. + + + + + + Iterable type variance example + + + +]]> + + + + + + + + diff --git a/reference/var/functions/is-iterable.xml b/reference/var/functions/is-iterable.xml new file mode 100644 index 0000000000..833afa5bb9 --- /dev/null +++ b/reference/var/functions/is-iterable.xml @@ -0,0 +1,100 @@ + + + + + is_iterable + + Verify that the contents of a variable is an iterable value + + + + + &reftitle.description; + + boolis_iterable + mixedvar + + + Verify that the contents of a variable is accepted by the + iterable pseudo-type, i.e. that it is an array or + an object implementing Traversable + + + + + &reftitle.parameters; + + + + var + + + The value to check + + + + + + + + + &reftitle.returnvalues; + + Returns &true; if var is iterable, &false; + otherwise. + + + + + &reftitle.examples; + + + <function>is_iterable</function> examples + + +]]> + + + + + + + &reftitle.seealso; + + + is_array + + + + + + + diff --git a/reference/var/versions.xml b/reference/var/versions.xml index e5632cbc26..f82bb1002d 100644 --- a/reference/var/versions.xml +++ b/reference/var/versions.xml @@ -22,6 +22,7 @@ +