Mark van Eijk · Rocketeers

Knowledge

#PHP

PHP 8 turned accessing a missing array key into a warning instead of a silent notice. The fix is to check the key exists or provide a default before reading it.

Published by Mark van Eijk on June 23, 2026 · 1 minute read

  1. About the error
  2. Why do I see this error
  3. Solution
  4. Provide a default with the null coalescing operator
  5. Check existence explicitly
  6. In Laravel

About the error

PHP Warning: Undefined array key "email" in /var/www/app.php on line 12

You read $array['email'] but that key doesn't exist. In PHP 7 this was a quiet E_NOTICE many people never saw; PHP 8 promoted it to an E_WARNING, so upgrading a codebase surfaces a flood of these. A closely related message is Trying to access array offset on value of type null, which means the thing you indexed wasn't an array at all.

Why do I see this error

  • The key really isn't there (an optional form field, a missing query parameter).
  • A typo in the key name.
  • The variable is null rather than an array, so there's no key to read.
  • Code that "worked" on PHP 7 because the notice was hidden.

Solution

Provide a default with the null coalescing operator

The cleanest fix is ??, which returns the right-hand side when the key is missing or null:

$email = $_POST['email'] ?? null;
$page  = $_GET['page'] ?? 1;

Check existence explicitly

When you need to branch on whether the key is present:

if (array_key_exists('email', $data)) {
    // present, even if its value is null
}

if (isset($data['email'])) {
    // present and not null
}

Note the difference: isset() treats a key with a null value as "not set", while array_key_exists() only checks the key is there.

In Laravel

Use data_get() or request helpers, which return null (or a default) instead of warning:

$value = data_get($array, 'user.email', 'unknown');
$page  = $request->input('page', 1);

If the underlying value is an object rather than an array and you're calling a method on it, see Call to a member function on null. And if PHP can't find a class at all, see Class not found.

Read the original on rocketeersapp.com ↗