Skip to content

isset() on hooks doesn't respect backing value #5040

@damek24

Description

@damek24

Description

The following code:

<?php

class User {
	public ?string $id {
		get => $this->id; // get => $this->id ?? null; works
		set => $this->id = $value;
	}
}

class User2 {
    public string $id;
}

$u = new User();
$u2 = new User2();
var_dump(isset($u2->id));//false OK
var_dump(isset($u->id));//error

Resulted in this output:
First var_dump retuns false and this is ok, second - produces Fatal error: Uncaught Error: Typed property User::$id must not be accessed before initialization
But I expected this output instead:
false two times

This suggests that isset() on hooked properties may incorrectly trigger property access instead of checking initialization state, unlike regular typed properties.

PHP Version

PHP 8.5.0 (cli) (built: Nov 20 2025 19:17:11) (NTS)
Copyright (c) The PHP Group
Built by Debian
Zend Engine v4.5.0, Copyright (c) Zend Technologies
    with Zend OPcache v8.5.0, Copyright (c), by Zend Technologies

PHP 8.4.15 (cli) (built: Nov 20 2025 17:43:25) (NTS)
Copyright (c) The PHP Group
Built by Debian
Zend Engine v4.4.15, Copyright (c) Zend Technologies
    with Zend OPcache v8.4.15, Copyright (c), by Zend Technologies
    with Xdebug v3.4.7, Copyright (c) 2002-2025, by Derick Rethans

Operating System

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions