Type Hinting for Arrays of Objects
When working with classes and functions, type hinting can be used to specify the expected type of arguments. However, when attempting to pass an array of objects to a function, an error may occur. This article explores how to handle such situations.
To understand this issue, consider the following class and function:
<code class="php">class Foo {} function getFoo(Foo $f) {}</code>
Attempting to pass an array of Foo objects to getFoo results in an error:
Catchable fatal error: Argument 1 passed to getFoo() must be an instance of Foo, array given
To resolve this issue, a custom type representing an array of Foo objects can be created. One approach is to create a class that extends ArrayObject and implements an offsetSet method to validate that any values added to the array are instances of Foo.
<code class="php">class ArrayOfFoo extends \ArrayObject { public function offsetSet($key, $val) { if ($val instanceof Foo) { return parent::offsetSet($key, $val); } throw new \InvalidArgumentException('Value must be a Foo'); } }</code>
By using the custom ArrayOfFoo type, you can ensure that you are working with an array of Foo objects, and functions can receive an ArrayOfFoo argument.
Another option is to use a library like Haldayne to handle the boilerplate for membership requirement checks:
<code class="php">class ArrayOfFoo extends \Haldayne\Boost\MapOfObjects { protected function allowed($value) { return $value instanceof Foo; } }</code>
The above is the detailed content of How to Handle Type Hinting for Arrays of Objects?. For more information, please follow other related articles on the PHP Chinese website!