[php-src] Issue #20663: Need a Built-in `is_assigned()` to distinguish between declared-but-uninitialized and assigned-null

[email protected] (HichemTab-tech)
Newsgroups php.bugs
Message-ID <[email protected]>
Issue: https://github.com/php/php-src/issues/20663
Author: HichemTab-tech

### Description

### TL;DR

PHP has no built-in way to check whether a variable or property has actually been **assigned**, as opposed to simply being `null` or not existing. `isset()` can’t tell the difference between “assigned null” and “not assigned,” and nothing else works consistently. A function like `is_assigned()` would solve this.

### **Full**

Right now PHP has no reliable way to check if a variable, array key, or object property has *actually been assigned*, independent of its value.

`isset()` doesn’t help, because it returns false for both cases:

* when the variable/property is not defined
* when it’s defined but explicitly set to `null`

`property_exists()` doesn’t help either, because it reports properties as existing even if they were never assigned (just declared on the class).

`get_object_vars()` kind of works for objects, because it only lists assigned properties, even if they're assigned `null`. But this only works for objects, not variables. Reflection can detect uninitialized *typed* properties, but not untyped ones, and not variables or arrays.

So there’s no general solution in PHP today to tell the difference between:

* a variable/property that was never assigned
* a variable/property that was assigned `null`

This distinction matters when building DTOs, serializers, hydrators, ORMs, or anything where “user assigned null” is different from “value was never provided.”

It would help a lot if PHP had something like:

```php
is_assigned($var);
// or
is_assigned($myClass->prop);
```

which returns true if the variable/property/array key has ever been assigned, even if the assigned value is null, and false if it was never assigned or doesn’t exist.

This wouldn’t break anything and would fill a long-standing gap in the language where userland code simply cannot make this distinction.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.