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;
+
+
+ is_iterable 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 @@
+