doc-en icon indicating copy to clipboard operation
doc-en copied to clipboard

isset() on hooks doesn't respect backing value

Open damek24 opened this issue 1 month ago • 6 comments

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

damek24 avatar Dec 13 '25 15:12 damek24