rfc:autovivification_false

This is an old revision of the document!


PHP RFC: Disable autovivification on false

  • Date: 2021-05-25
  • Author: Kamil Tekiela dharman@php.net
  • Status: Under Discussion
  • Target Version: PHP 8.1

Introduction

PHP natively allows for autovivification (auto-creation of arrays from falsey values). This feature is very useful and used in a lot of PHP projects, especially if the variable is undefined or has been nullified before. However, there is a little oddity that allows creating an array from a false value.

$arr = false;
$arr[] = 2;

This RFC talks only about autovivification from false.

Proposal

The proposal is to disallow autovivification from false values. We will continue to allow autovivification from undefined variables or null values, but in every other case an error message will be shown:

Cannot use a scalar value as an array

In PHP 8.1, appending to a variable of type false will throw a deprecation error.

In PHP 9.0, this will throw a fatal error.

Rationale

Historically, many functions return false on error or array on success. In some scenarios, developers might want to assign an additional element to an array, e.g. a total section at the end of array fetched from PDO. PHP does not complain if the value is false. Whether it should be considered a bug or a “feature” is up for debate.

$stmt = $pdo->query("SELECT 1 WHERE 0");
$arr = $stmt->fetch();
// naively try to append
$arr[] = ['new row values'];

Throwing an error in such cases could save developers from common bugs in their code. On the other hand, this could also be considered useful by some developers. The rationale here is that the behaviour is inconsistent. Neither true, 0, nor “” can be used in autovivification today, so does it make sense to allow false?

Backward Incompatible Changes

Every single usage autovivification on false values will throw deprecation error in PHP 8.1 and throw a fatal error in PHP 9.0.

Vote

Yes/No.

rfc/autovivification_false.1621965405.txt.gz · Last modified: 2021/05/25 17:56 by dharman