PHP Functions Enforcing Types of Function Arguments - Supercoders | Web Development and Design | Tutorial for Java, PHP, HTML, Javascript PHP Functions Enforcing Types of Function Arguments - Supercoders | Web Development and Design | Tutorial for Java, PHP, HTML, Javascript

Breaking

Post Top Ad

Post Top Ad

Thursday, May 23, 2019

PHP Functions Enforcing Types of Function Arguments

PHP Functions



Enforcing Types of Function Arguments

Problem

You want to ensure argument values have certain types.

Solution

Use type hints on the arguments when you define your function. A type hint goes before the parameter name in a function declaration:

            function drink_juice(Liquid $drink) {
            /* ... */
            }

            function enumerate_some_stuff(array $values) {
            /* ... */
            }

Discussion

A type hint can be a class name, an interface name, the keyword array (since PHP 5.1) or the keyword callable (since PHP 5.4). If, at runtime, a value is passed for a type hinted parameter that does not satisfy the type hint, PHP triggers an E_RECOVERABLE_ERROR error.

If you give a type-hinted parameter a default value of null, either the null value or a value of the proper type is allowed. In the following code, the must_be_an_array() function requires an array-typed parameter. Anything else will trigger an E_RECOVERABLE_ERROR error. The array_or_null_is_ok() function, however, is more forgiving. If you provide a parameter, it must be an array or null. If you omit the parameter, the $fruits local variable in the function will be equal to null:

            function must_be_an_array(array $fruits) {
                   foreach ($fruits as $fruit) {
                          print "$fruit\n";
                   }
            }

            function array_or_null_is_ok(array $fruits = null) {
                   if (is_array($fruits)) {
                          foreach ($fruits as $fruit) {
                                 print "$fruit\n";
                          }
                   }
            }

No comments:

Post a Comment

Post Top Ad