Laravel Certification Study: Section 1 PHP – Version 7.1+

1. iteratable psuedo type

This is a new type that can be used to more generically indicate that what is being passed can be iterated over using something like foreach. Prior to this, you could not type hint an iterable custom object.

2. Closure from callable

Allows you to create a closure from any callable function. This new technique will help catch typos up front, and improves performance.

3 and 4. Square bracket syntax for list.

This one is a shorthand for list($a, $b, $c) = [‘a’,’b’,’c’]; We can now write [$a, $b, $c] = [‘a’, ‘b’, ‘c’]; It also now allows you to specify the keys, and supports multi-dimensional arrays.

5. Class constant visibility

Class constants can now explicitly be set to protected, private, or public to aid in information hiding.

6. Nullable types

Now you can type hint, and allow optional null. Just put a ? in front of the type hint. Applies to function params and return types.

7. Void functions

You can now specify that a function may only return void. function foo() : void

8. Catching multiple exception types

Catch can now have more than one exception type. Just separate them with a | like catch(FooException | BarException)

9. Too few arguments exception

This one just means that in PHP 7.1, calling a function without required parameters will trigger an Error exception. It was a warning previously, but now you have to deal with it. This is a potentially breaking change when upgrading.



Defensive Programming | Laravel find()
  • Defensive Programming

One of the things I’ve learned in my career is to code defensively.

Laravel makes it very easy to ask for an object, but it also makes it very easy to get it wrong. If you request an object using the find method and it doesn’t find it, you don’t get an error. You get a null. If you then request a property on that object, without first checking for a null, you will get a run-time error.

This is pretty basic stuff, but it never hurts to go over it again.


$name = Widget::find(23)->name;




if ($widget = Widget::find(23)) { $name = $widget->name; }



The first block will throw an error if Widget #23 doesn’t exist in the database. The second checks for it’s existence and then only reaches for the name if it found it.



Are you also a PHP programmer? I’ve got other blog entries that you might be interested in!


More about me

I have been programming for almost 20 years. It all started with Basic and RPG III way back in high school, and have played around with many languages. PHP is my main language today.

Some sites I have built:

For fans of BMX legend Scotty Cranmer:

Meet my Basenji’s Graham and Ginger:

Meet my newest Basenji, Zulu: