skip to Main Content

Please take a look at this code:

$end = isset($newvar) ? array($newvar) : null;
while($ends = array_shift($end)){
  ...

It was working well when I was using PHP 7.2, but after upgrading to 8.1, it throws:

PHP Fatal error: Uncaught TypeError: array_shift(): Argument #1 ($array) must be of type array, null given in /path/to/qanda.php:469

Any idea how can I fix it?

2

Answers


  1. Just use an empty array instead:

    $end = isset($newvar) ? array($newvar) : [];
    

    array_shift will return null on the first call with an empty array as input, so the loop will not execute.

    Login or Signup to reply.
  2. The most basic solution would be to replace the null value with an empty array to comply with the type requirements:

    $end = isset($newvar) ? array($newvar) : [];
    while($ends = array_shift($end)){
    

    You could also create the array and use the null coalescing operator on $newvar:

    $end = [$newvar ?? null];
    while($ends = array_shift($end)){
    

    But I don’t understand why you would create an array with a single value and then create a loop using array_shift‘s return value. The loop body will only run once.
    Maybe just use a condition ?

    if (isset($newvar)) {
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search