Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:128019 X-Original-To: internals@lists.php.net Delivered-To: internals@lists.php.net Received: from php-smtp4.php.net (php-smtp4.php.net [45.112.84.5]) by lists.php.net (Postfix) with ESMTPS id BA1151A00BC for ; Sun, 13 Jul 2025 13:38:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=php.net; s=mail; t=1752413783; bh=kWZiPWnNlpY61SgEemL2oMg1y4/RovvKflIgnPca8Io=; h=Date:Subject:To:References:From:In-Reply-To:From; b=U5I4aw/HA1M4KRNjm1/a24nKVufKGx4bh1Ci8lpVgYdXkT97oeOBkhbePn8LnvXsP n80uKF55azn5Y0auZ0p2bME/f4ZB4kGpmJQFOILnsU3mki+4w1FuyxNxpD6TTUiRRx yGvAJFAWIVRhqv0wNOMq7RfiS+0PF1IgKCP6RWXV1CoD1w3Z0vNmAwpMYU8x8GBlGO Iac1fi7we50Xro0gLu2IOaaO7BaeNJUQrfgnrf3iBJEDzE0EH0vJHCgXiJrdhzLMfr DeGwEKkWa7VQZunz2cMHUZfpjVlC7xqbt4DY6enLPo1pKapQTL5Y3zn1PIIgM3Yc4M i7Db56RG1oyBg== Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 99A5E18005B for ; Sun, 13 Jul 2025 13:36:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,DMARC_MISSING,HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE, SPF_PASS autolearn=no autolearn_force=no version=4.0.1 X-Spam-Virus: Error (Cannot connect to unix socket '/var/run/clamav/clamd.ctl': connect: Connection refused) X-Envelope-From: Received: from wp160.webpack.hosteurope.de (wp160.webpack.hosteurope.de [80.237.132.167]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Sun, 13 Jul 2025 13:36:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mabe.berlin ; s=he194859; h=Content-Type:In-Reply-To:From:References:To:Subject: MIME-Version:Date:Message-ID:From:Sender:Reply-To:Subject:Date:Message-ID:To: Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID: Content-Description:In-Reply-To:References; bh=mW/Kg0fl6r21akVP7ffX8W6Zi4/iju9Z0nnd98Ej/f4=; t=1752413890; x=1752845890; b=aqikj5p1uZYyCd0UJb/TDKrUsKRClRbAKbQYJb1DzmJQRD5Qq165z9A6E3lGqHvATXwUaiSKGrZ D3zcOzQSaohdBOfvm+K7B/fAG0gx67NtpLZtF7X4VfXd2SnHLZUFuVrlzbw9B2JEhBhLzY1KUEmjt KIHtePMEEdAPEE2qrtJLsrUGO5IDXcHUXERbkgP9tEUHpPxSk8hV+xDWi6je+JP6crm7jldwOjhF5 ByqzhDc9jvIr8GnFY17AgHLG1/1FagsLsRdmBf6fZR2ROdu8xOj92bkNmqbyB9csGhVrM5Nkd6Ynn WHXzeNg2h55HZlDRBCaYph3IGzn2+c9IeOhw==; Received: from [2a02:8109:b300:8f00:5a7f:6e0b:ff1c:3497]; authenticated by wp160.webpack.hosteurope.de running ExIM with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_128_GCM:128) id 1uawu8-000rZf-1t; Sun, 13 Jul 2025 15:38:08 +0200 Message-ID: Date: Sun, 13 Jul 2025 15:38:08 +0200 Precedence: bulk list-help: list-post: List-Id: internals.lists.php.net x-ms-reactions: disallow MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PHP-DEV] [RFC] Readonly property hooks To: internals@lists.php.net References: <1e8634d7-ac1a-4025-b4e2-1948aabf5251@app.fastmail.com> <9D5043B2-1589-4FD5-B289-6E98FB1177BE@nicksdot.dev> <16BD443D-A179-465D-84A0-6E3780F62D8E@gmail.com> <203C1BD7-E688-4E26-8EA6-EA5331525470@nicksdot.dev> Content-Language: en-US Autocrypt: addr=marc@mabe.berlin; keydata= xsBNBFby8roBCAD4qHjbk9+V3SmB5DfpkTtX58jYJ9VXVfF54MDoI0fQiYvKyrrghfO78alH c12RsEZxLH2F5kEfu8WO4wA4apg2gBnRRxqPj7krsct1ySOAdMrRVp8Wtaeaznpdcn2gJZyA MSI6LTzebT25N77ksvSrUi1BuCKyOa7SmYff3xGgOwYsHQlT5opMNGPCVegiPmO/K37anwts gj6L7RVtjXtp2Z3wAs6r3EmO318PL48xDLUgYMvEFAPJglth5FGH2En6n6HFIhxh43LqXQiN eHVjLjS2y8huNBswwc9ZVxk3ip5z/GCmpWnNkgGBOSJ7loJRsq2tOaU6yU8KWb5rhOoFABEB AAHNIU1hcmMgQmVubmV3aXR6IDxtYXJjQG1hYmUuYmVybGluPsLAeAQTAQIAIgUCVvLyugIb AwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQOTar91O8iM6jzggAwvV6MqU/hcAI6ldp xVjucGz2J9cAWtva8GL+rm9zvEs7EENtamehJiZob/CTw50WiI/zsJzPblktpT0D2AFBEp9k P5/8CmCpZzxYPsxnLtsFM52fOBpO+aP0PSStBpJjndjBH7HPqKcTCXM3ZM+SL6lyRweAJR7G +JXIZbuUrbjB2lbGx3itNZ6TeXqqnE6KTXNKLEbNHfVdzE4sPDkmuZRo/M2h+gmeS1iQb29W BmhvL6czugCQI9rYl7C4Nci9wPii1lTYyfCWQfQKID4/F2HiOv+N/vDMCK1xV8TUeCy8w4X+ nYj+wDog046ki9lUM60oPij6WoSJLqfsXr1kNc7ATQRW8vK6AQgAq7QYLB1Dz+8RSi5AGJP1 tOFQXtcxyOhNVQZsI1mCQiHay4wteQ+5m4EOUuR+FrFIlnbSrPdTkKD2wvQDHVqpZivThBpJ vara/ick0wi2R3dasu1sPMu1P6h1EwUsydhviNJB07aLfPAWD6eoqmGTd8236znIIq7mbnNp OnxIQxviTyELUekrNw38uQtVzR6XZv9PAThA2o1J1JZID7QUpKcNyo9ebYlwxyS+xzhA4DLD qfD6O5sKoKvxEf2fIZeP0ETPpHNYk0WiWnmNoPy8eEY07LriYALVidBwPBcxus0wGoKf8Nun y2aE13SHmj0ioBI1bXMGJx3hEbvzXK6WrwARAQABwsBfBBgBAgAJBQJW8vK6AhsMAAoJEDk2 q/dTvIjOkowIAI70P8U4j3eqyK/7x1bnCZZRcpwZ1aH+LR1yMKTINo9NDqlOBWQTLT69YMfV 4UN+nTSiD/uLw1fSeLSzBwpoalCMLPVOX/d3Mq5JtL5cKtWUTIVf3Vb7VbN4Rvb8HgWjeSnM 1PiG9yQBmLKI68sG/gdgvA/xANdUatkDgG0yj8PCdt+Vy4EblXbIAXZXJ6eRugSKowTjst7i HXKOJxivomHFcmqmkiqjwGTGx/jrhbDtEpPDRk+U9W45D4CbUcyPR6lMSrje5JPGQDv/45M5 wPe286YelBjnb0cWRJpA7GZCWDKZOsQ2H6cCRBi8i4m+vfRk7GLA536XnmvWxKFVP9U= In-Reply-To: <203C1BD7-E688-4E26-8EA6-EA5331525470@nicksdot.dev> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------4aCiXRKVlKWQQ0K4QkF6ULwM" X-bounce-key: webpack.hosteurope.de;marc@mabe.berlin;1752413890;7d371537; X-HE-SMSGID: 1uawu8-000rZf-1t From: marc@mabe.berlin (Marc Bennewitz) This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------4aCiXRKVlKWQQ0K4QkF6ULwM Content-Type: multipart/mixed; boundary="------------G2q29gslZ6QKifFY77j8EUMD"; protected-headers="v1" From: Marc Bennewitz To: internals@lists.php.net Message-ID: Subject: Re: [PHP-DEV] [RFC] Readonly property hooks References: <1e8634d7-ac1a-4025-b4e2-1948aabf5251@app.fastmail.com> <9D5043B2-1589-4FD5-B289-6E98FB1177BE@nicksdot.dev> <16BD443D-A179-465D-84A0-6E3780F62D8E@gmail.com> <203C1BD7-E688-4E26-8EA6-EA5331525470@nicksdot.dev> In-Reply-To: <203C1BD7-E688-4E26-8EA6-EA5331525470@nicksdot.dev> --------------G2q29gslZ6QKifFY77j8EUMD Content-Type: multipart/mixed; boundary="------------3opUmS1IR1y96ZV9q6vEkKBn" --------------3opUmS1IR1y96ZV9q6vEkKBn Content-Type: multipart/alternative; boundary="------------MgDh31WiW0ZAKXrlo3c002qH" --------------MgDh31WiW0ZAKXrlo3c002qH Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 DQpPbiAxMS4wNy4yNSAxMTozOCwgTmljayB3cm90ZToNCj4NCj4+IE9uIDExLiBKdWwgMjAy NSwgYXQgMTQ6MjUsIENsYXVkZSBQYWNoZSA8Y2xhdWRlLnBhY2hlQGdtYWlsLmNvbT4gd3Jv dGU6DQo+Pg0KPj4+IExlIDExIGp1aWwuIDIwMjUgw6AgMDY6MzAsIE5pY2sgPHBocEBuaWNr c2RvdC5kZXY+IGEgw6ljcml0IDoNCj4+Pg0KPj4+IFRvIG5vdCBnZXQgdGhpcyBidXJpZWQg aW4gaW5kaXZpZHVhbCBhbnN3ZXJzIHRvIG90aGVyczoNCj4+Pg0KPj4+IEkgY2FtZSB1cCB3 aXRoIHR3byBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMgd2hpY2ggY2FjaGUgdGhlIA0K Pj4+IGNvbXB1dGVkIGBnZXRgIGhvb2sgdmFsdWUuDQo+Pj4gT25lIGxldmVyYWdlcyBzZXBh cmF0ZSBjYWNoZSBwcm9wZXJ0aWVzLCB0aGUgb3RoZXIgd3JpdGVzIGRpcmVjdGx5IA0KPj4+ IHRvIHRoZSBiYWNraW5nIHN0b3JlLg0KPj4+DQo+Pj4gTGlua3MgdG8gdGhlIGFsdGVybmF0 aXZlIGJyYW5jaGVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgDQo+Pj4g dGhlIG9yaWdpbmFsIFBSLg0KPj4+IGh0dHBzOi8vZ2l0aHViLmNvbS9waHAvcGhwLXNyYy9w dWxsLzE4NzU3DQo+Pj4NCj4+PiBJIGJlbGlldmUgdGhhdCB0aGVzZSBhcmUgZmFpciBzb2x1 dGlvbnMgdG8gYWRkcmVzcyB0aGUgY29uY2VybnMgdGhhdCANCj4+PiBjYW1lIHVwIGluIHRo ZSBkaXNjdXNzaW9uLCBhbmQgSSBob3BlIHBlb3BsZSB3aWxsIGFncmVlLg0KPj4+DQo+Pj4g KkNoZWVycywqDQo+Pj4gTmljaw0KPj4NCj4+DQo+PiBIaSBOaWNrLA0KPj4NCj4+IEkgdGhp bmsgdGhhdCB0aGUgc2Vjb25kIGFsdGVybmF0aXZlIGRlc2NyaWJlZCBhczoNCj4+DQo+PiDi gJxDYWNoZSBjb21wdXRlZCBnZXQgaG9vayB0byBpdCdzIGJhY2tpbmcgc3RvcmU7IG5ldmVy IHJ1biB0aGUgaG9vayBhZ2FpbuKAnQ0KPj4NCj4+IGlzIG5lYXIgdGhlIG1vc3QgcmVhc29u YWJsZSBmcm9tIG15IHBvaW50IG9mIHZpZXcgKGJhc2luZyBteSBqdWRnbWVudCANCj4+IG9u IHRoZSBkZXNjcmlwdGlvbiwgYXMgSSBoYXZlIG5vdCBsb29rZWQgdGhlIGFjdHVhbCBpbXBs ZW1lbnRhdGlvbiksIA0KPj4gYWx0aG91Z2ggdGhlcmUgYXJlIHN0aWxsIHNvbWUgY29uY2Vy bnMuDQo+Pg0KPj4gQWR2YW50YWdlcyBvZiB0aGF0IGFwcHJvYWNoOg0KPj4NCj4+IDEuIHJl bGF0aXZlbHkgdG8gdGhlIGZpcnN0IGFsdGVybmF0aXZlIHNvbHV0aW9uOiB0aGVyZSBpcyBp bmRlZWQgbm8gDQo+PiBwb2ludCB0byBoYXZlIGEgY2FjaGUgc2VwYXJhdGUgZnJvbSB0aGUg YmFja2luZy1zdG9yZSwgYXMgdGhlIA0KPj4gYmFja2luZy1zdG9yZSBpcyBzdXBwb3NlZCB0 byBwbGF5IHRoYXQgcm9sZSBpbiBtb3N0IGNhc2VzOw0KPj4NCj4+IDIuIHJlbGF0aXZlbHkg dG8gdGhlIG1hbnVhbCDigJw/Pz3igJ0gcGF0dGVybiwgaXQgd29ya3MgY29ycmVjdGx5IHdp dGggDQo+PiBudWxsYWJsZSBwcm9wZXJ0aWVzLg0KPj4NCj4+IEhlcmUgYXJlIG15IHJlbWFp bmluZyBjb25jZXJuczoNCj4+DQo+PiBBLiBJdCBtYXkgYmUgY29uZnVzaW5nIHRvIGhhdmUg YSBnZXR0ZXIgdGhhdCBpcyBub3QgYWx3YXlzIGNhbGxlZC4NCj4+DQo+PiBCLiBUaGUgaWRl YSBvZiByZXR1cm5pbmcgdGhlIHZhbHVlIGRpcmVjdGx5IGZyb20gdGhlIGJhY2tpbmctc3Rv cmUgaWYgDQo+PiBpbml0aWFsaXNlZCBpcyB1c2VmdWwgYWxzbyBmb3Igbm9uLXJlYWRvbmx5 IHByb3BlcnRpZXMuIChUaGF0IGNhbiBiZSANCj4+IGVtdWxhdGVkIHdpdGggdGhlIOKAnD8/ PeKAnSBwYXR0ZXJuLCBidXQgb25seSBpZiB0aGUgcHJvcGVydHkgaXMgbm90IA0KPj4gbnVs bGFibGUuKQ0KPj4NCj4+IEJvdGggY29uY2VybnMgbWF5IGJlIHJlc29sdmVkIHdpdGggdGhl IGZvbGxvd2luZyBhbWVuZG1lbnQ6DQo+Pg0KPj4gKiBJbnRyb2R1Y2UgYSBgY2FjaGVkYCBt b2RpZmllciwgdGhhdCBlbmFibGVzIHRoZSBjYWNoaW5nIHNlbWFudGljcyANCj4+IChpLmUu LCBub3QgZXhlY3V0aW5nIHRoZSBnZXR0ZXIgaWYgdGhlIGJhY2tpbmctc3RvcmUgaXMgaW5p dGlhbGlzZWQpLg0KPj4NCj4+IFRoZSBleGFtcGxlIGZyb20gdGhlIFJGQyB3b3VsZCBiZSB3 cml0dGVuIGFzOg0KPj4NCj4+IGBgYHBocA0KPj4gcmVhZG9ubHkgY2xhc3MgTGF6eVByb2R1 Y3QgZXh0ZW5kcyBQcm9kdWN0IHsNCj4+DQo+PiDCoCDCoHByaXZhdGUgRGJDb25uZWN0aW9u ICRkYkFwaTsNCj4+IMKgIMKgcHJpdmF0ZSBzdHJpbmcgJGNhdGVnb3J5SWQ7DQo+PiDCoCDC oHB1YmxpYyBDYXRlZ29yeSAkY2F0ZWdvcnkgew0KPj4gwqAgwqAgwqAgwqBjYWNoZWQgZ2V0 ID0+ICR0aGlzLT5kYkFwaS0+bG9hZENhdGVnb3J5KCR0aGlzLT5jYXRlZ29yeUlkKTsNCj4+ IMKgIMKgfQ0KPj4gfQ0KPj4gYGBgDQo+Pg0KPj4gVGhlIGBjYWNoZWRgIG1vZGlmaWVyIG1h eSBiZSBhcHBsaWVkIHRvIGFueSBnZXQgaG9vaywgYnV0IGl0IGlzIA0KPj4gbWFuZGF0b3J5 IGlmIHRoZSBwcm9wZXJ0eSBpcyByZWFkb25seS4NCj4+DQo+PiAoSW4gcHJhY3RpY2UsIHRo ZSDigJxjYWNoZWQgZ2V0IGhvb2vigJ0gY29ycmVzcG9uZHMgdG8gbXkgb3JpZ2luYWxseSAN Cj4+IHByb3Bvc2VkIOKAnGluaXQgaG9va+KAnSwgYnV0IHdpdGggdGhlIGFkdmFudGFnZSBv ZiBub3QgaGF2aW5nIGEgc2VwYXJhdGUgDQo+PiBob29rLikNCj4+DQo+PiDigJRDbGF1ZGUN Cj4NCj4gSGV5IENsYXVkZSwNCj4NCj4gSSBhZ3JlZSwgdGhlIHNlY29uZCBhbHRlcm5hdGl2 ZSBpcyBtb3JlIG5lYXQuDQo+DQo+PiBBLg0KPg0KPiBUaHJlZSBwZW9wbGUgc2VlbSB0byB0 aGluayB0aGF0IGFsd2F5cyBydW5uaW5nIHRoZSBob29rIHdoZW4gcmV0dXJuaW5nIA0KPiBh IGNhY2hlZCB2YWx1ZSB3b3VsZCBjYXVzZSBjb25mdXNpb24uDQo+IFlvdSBhcmUgbm93IGFy Z3VpbmcgZm9yIHRoZSBleGFjdCBvcHBvc2l0ZS4gSSBkb27igJl0IGhhdmUgYSB2ZXJ5IHN0 cm9uZyANCj4gb3BpbmlvbiBoZXJlLg0KPiBIb3dldmVyLCBJIGFsc28gY2FtZSB0byB0aGUg Y29uY2x1c2lvbiB0aGF0IGNhY2hpbmcgYW5kIG5vdCBydW5uaW5nIA0KPiB0aGUgaG9vayBp cyB0aGUgbW9yZSBvYnZpb3VzIGFuZCBsZXNzIGNvbmZ1c2luZyBhcHByb2FjaC4NCj4gQWxz bywgbmF0dXJhbGx5IGl04oCZcyBtb3JlIHBlcmZvcm1hbnQgdG8gbm90IHJ1biB0aGUgaG9v ayBhZ2Fpbi4NCj4NCj4gUnVubmluZyB0aGUgaG9vayBhZ2FpbiwgYnV0IHRoZW4gbm90IHVw ZGF0aW5nIHRoZSB2YWx1ZSBmZWVscyBvZmYuDQo+IEFuZCB1cGRhdGluZyB0aGUgdmFsdWUg d291bGQgbWVhbiBubyBjYWNoaW5nLCB3aGljaCBicmluZ3MgdXMgdG8gdGhlIA0KPiB2ZXJ5 IGJlZ2lubmluZyBhbmQgeW91ciB2ZXJ5IGNvbmNlcm4uDQo+IFNvLCB5ZWFo4oCmIHRoYXTi gJlzIHRoYXQuIDopDQo+DQo+PiBCLg0KPg0KPiBJIGFtIGFmcmFpZCBoZXJlIEkgZG8gaGF2 ZSBhIHN0cm9uZyBvcGluaW9uLiBQbGVhc2UgcmVtZW1iZXIgbXkgdmVyeSANCj4gZmlyc3Qg bWFpbCBiZWZvcmUgZGlzY3Vzc2lvbiBbMV0uDQo+IFdoaWxlIGZvciBMYXJyeSB0aGUgbWFp biByZWFzb24gZm9yIGByZWFkb25seWAgaG9va3MgaXMgDQo+IGxhenktaW5pdGlhbGlzYXRp b24sIGZvciBtZSBpdCBpcyB0byB3cml0ZSBsZXNzIGNvZGUsIHRvIGhhdmUgbGVzcyANCj4g bm9pc3kgY2xhc3Nlcy4NCj4gSSBkb27igJl0IHdhbnQgdG8gYmUgZm9yY2VkIHRvIGFkZCBy ZWFkb25seSB0byBlYWNoIHByb3BlcnR5Lg0KPiBOb3cgeW91IGFyZSBwcm9wb3NpbmcgYSBt YW5kYXRvcnkgYGNhY2hlZGAgbW9kaWZpZXIuIFdoaWNoIG1lYW5zIA0KPiAqY2hlY2tzIG5v dGVzKiwgSSB3b3VsZCBzYXZlIDIgY2hhcmFjdGVycyBvbiBlYWNoIHByb3BlcnR5Lg0KPiBZ b3Ugd2lsbCB1bmRlcnN0YW5kIHRoYXQgdGhpcyBpcyBub3QgaW4gbXkgaW50ZXJlc3QsIGFu ZCBub3Qgd2hhdCBJIGFtIA0KPiBwcm9wb3NpbmcgaGVyZS4NCj4NCj4gQnV0IGFzaWRlIGZy b20gdGhhdCBJIGRvIG5vdCBsaWtlIHRvIHdyaXRlIG1vcmUgY29kZS4gSSBob25lc3RseSBk b27igJl0IA0KPiBzZWUgdGhlIGJlbmVmaXQgb2YgaGF2aW5nIHRoaXMgbW9kaWZpZXIgaW4g dGhlIGZpcnN0IHBsYWNlLg0KPiBIb3cg4oCcYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24g MuKAnSB3b3JrcyBub3cgaXMgSU1PIGp1c3QgZ29vZC4gQW5kIGl0IA0KPiBtYWtlcyBzZW5z ZSBiZWNhdXNlIGl0IGlzIGxpbWl0ZWQgdG8gdGhlIGByZWFkb25seWAgY29udGV4dC4NCj4g VGhlcmUgaXMgbm8gdGVjaG5pY2FsIG5lZWQgZm9yIHRoZSBtb2RpZmllci4gQXMgd2Ugc2Vl LCBiZWNhdXNlIHdlIA0KPiBoYXZlIGEgd29ya2luZyBzb2x1dGlvbiBhdCBoYW5kLg0KPg0K PiBGb3IgbWU6IEl0IGlzIGNsZWFyLCBpdOKAmXMgc29sdmluZyB0aGUgbWFpbiBpc3N1ZSB5 b3UgcmlnaHRmdWxseSANCj4gYnJvdWdodCB1cCwgYW5kIGl0IGlzIGxlc3MgY29kZSB0byB3 cml0ZS4NCj4NCj4gSSBjYW4gaW1hZ2luZSB0aGF0IGBjYWNoZWRgIGNvdWxkIGJlIGhlbHBm dWwgb24gbm9uIGByZWFkb25seWAgDQo+IHByb3BlcnRpZXMgaW4gc29tZSBjYXNlcy4NCj4g SG93ZXZlciwgSSBmZWVsIHRoYXQgYnJpbmdzIHVzIGFsbW9zdCBpbiBzaW1pbGFyIHRlcnJp dG9yeSB0aGFuIA0KPiBpbW11dGFibGUgY2xhc3Nlcy4NCj4gSXQgaXMgYSB3aG9sZSBuZXcg dG9waWMgd2hpY2ggSSBiZWxpZXZlIHJlYWxseSBzaG91bGRu4oCZdCBiZSBwYXJ0IG9mIA0K PiB0aGlzIFJGQyB0aGF0IGV4cGxpY2l0bHkgLg0KPiBDYW4gd2UgcGxlYXNlIGFncmVlIG9u IHRoYXQgaXQgaXMgZnV0dXJlIHNjb3BlIHdoZXRoZXIgb3Igbm90IG5vbiANCj4gYHJlYWRv bmx5YCBob29rcyBzaG91bGQgZ2V0IHN1Y2ggYSBtb2RpZmllcj8NCj4NCj4gSeKAmWQgYXBw cmVjaWF0ZSBpZiB3ZSBjb3VsZCBzZXR0bGUgd2l0aCDigJxhbHRlcm5hdGl2ZSBpbXBsZW1l bnRhdGlvbiAy4oCdIA0KPiBhcyBwcm9wb3NlZC4NCg0KSGkgTmljaywgQ2xhdWRlLA0KDQpJ IHRoaW5rIGl0J3MgaW1wb3J0YW50IHRvIGV4cGxpY2l0bHkgbWFyayBpdCBhcyAidGhpcyB2 YWx1ZSB3aWxsIGJlIA0Kc3RvcmVkIGluIG1lbW9yeSIsIEkgbWVhbiBqdXN0IHNpbGVudGx5 IGNhY2hpbmcgdGhlIGdldCBob29rIGNvdWxkIA0KcXVpY2tseSBsZWFkIHRvIHVuZXhwZWN0 ZWQgYmVoYXZpb3IuIExpa2Ugb25lIHdvdWxkIGV4cGVjdCB0aGUgdmFsdWUgdG8gDQpiZSBj aGFuZ2VkIGFuZCBhbm90aGVyIG9uZSB3b25kZXJzIHdoeSBhIGJpZyBjaHVuayBvZiBtZW1v cnkgd2lsbCBub3QgYmUgDQpmcmVlZCBgZ2V0ID0+ICR0aGlzLT5yZWFkQmlnRmlsZSgpO2Au DQoNCk9uIHRoZSBvbmUgaGFuZCBJIGxpa2UgdGhlIGNhY2hlZCBtb2RpZmllciBidXQgcGVy c29uYWxseSBJIHdvdWxkIHByZWZlciANCmEgc2VwYXJhdGUgaW5pdCBob29rIGJlY2F1c2Ug aXQgc2VlbXMgdG8gYmUgbW9yZSBjbGVhciB0aGF0IHRoaXMgaXMgYSANCmJhY2tlZCBwcm9w ZXJ0eSB0aGF0IHdpbGwgYmUgaW5pdGlhbGl6ZWQgb25jZS4NCg0KVGhlIGNhY2hlZCBtb2Rp ZmllciBJIHdvdWxkIGV4cGVjdCB0byBiZSBhbiBhdHRyaWJ1dGUgYXBwbGljYWJsZSB0byBh bnkgDQpmdW5jdGlvbiB3aGljaCB1c2VzIGFub3RoZXIgY2FjaGUgc3RvcmUgc2ltaWxhciB0 byBob3cgaXQncyBwb3NzaWJsZSBpbiANCnB5dGhvbiB0byBtZW1vcml6ZSBmdW5jdGlvbiBj YWxscyB3aGljaCB3b3VsZCBiZSBhIHZlcnkgZGlmZmVyZW50IGZlYXR1cmUuDQoNCkp1c3Qg bXkgdHdvIGNlbnRzIGZyb20gc29tZW9uZSB3aXRob3V0IHZvdGluZyByaWdodHMNCg0KDQo+ DQo+ICpDaGVlcnMsKg0KPiBOaWNrDQo+DQo+IFsxXSBodHRwczovL2V4dGVybmFscy5pby9t ZXNzYWdlLzEyNzUyOQ0KPg0KPg0KPg0KPg0KPg0KPg0KPg0KPg0KPg0KPg0KPg0KPg0KPg0K Pg0K --------------MgDh31WiW0ZAKXrlo3c002qH Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable


On 11.07.25 11:38, Nick wrote:

On 11. Jul 2025, at 14:25, Claude Pache <claude.pache@gmail.com> wrote:

Le 11 juil. 2025 =C3=A0 06:30, Nick <php@nicksdot.dev> a =C3=A9crit :

To not get this buried in individual answers to others:

I came up with two alternative implementations which cache the computed `get` hook value.
One leverages separate cache properties, the other writes directly to the backing store.
=

Links to the alternative branches can be found in the description of the original PR.

I believe that these are fair solutions to address the concerns that came up in the discussion, and I hope people will agree.

Cheers,
Nick


Hi Nick,

I think that the second alternative described as:

=E2=80=9CCache computed get hook to it's backing store= ; never run the hook again=E2=80=9D

is near the most reasonable from my point of view (basing my judgment on the description, as I have not looked the actual implementation), although there are still some concerns.

Advantages of that approach:

1. relatively to the first alternative solution: there is indeed no point to have a cache separate from the backing-store, as the backing-store is supposed to play that role in most cases;

2. relatively to the manual =E2=80=9C??=3D=E2=80=9D pa= ttern, it works correctly with nullable properties.

Here are my remaining concerns:

A. It may be confusing to have a getter that is not always called.

B. The idea of returning the value directly from the backing-store if initialised is useful also for non-readonly properties. (That can be emulated with the =E2=80=9C??=3D=E2=80=9D pattern, but only if the property= is not nullable.)

Both concerns may be resolved with the following amendment:

* Introduce a `cached` modifier, that enables the caching semantics (i.e., not executing the getter if the backing-store is initialised).

The example from the RFC would be written as:

```php
readonly class LazyProduct extends Product {

=C2=A0 =C2=A0private DbConnection $dbApi;
=C2=A0
=C2=A0 =C2=A0private string $categoryId;
=C2=A0
=C2=A0 =C2=A0public Category $category {
=C2=A0 =C2=A0 =C2=A0 =C2=A0cached get =3D> $this->dbApi->loadCategory($this->categoryId);
=C2=A0 =C2=A0}
}
```

The `cached` modifier may be applied to any get hook, but it is mandatory if the property is readonly.

(In practice, the =E2=80=9Ccached get hook=E2=80=9D co= rresponds to my originally proposed =E2=80=9Cinit hook=E2=80=9D, but with= the advantage of not having a separate hook.)

=E2=80=94Claude

Hey Claude,

I agree, the second alternative is more neat.

A.=C2=A0

Three people seem to think that always running the hook when returning a cached value would cause confusion.
You are now arguing for the exact opposite. I don=E2=80=99t ha= ve a very strong opinion here.=C2=A0
However, I also came to the conclusion that caching and not running the hook is the more obvious and less confusing approach.
Also, naturally it=E2=80=99s more performant to not run the ho= ok again.=C2=A0

Running the hook again, but then not updating the value feels off.=C2=A0
And updating the value would mean no caching, which brings us to the very beginning and your very concern.
So, yeah=E2=80=A6 that=E2=80=99s that. :)

B.

I am afraid here I do have a strong opinion. Please remember my very first mail before discussion [1].
While for Larry the main reason for `readonly` hooks is lazy-initialisation, for me it is to write less code, to have less noisy classes.=C2=A0
I don=E2=80=99t want to be forced to add readonly to each prop= erty.
Now you are proposing a mandatory `cached` modifier. Which means *checks notes*, I would save 2 characters on each property.
You will understand that this is not in my interest, and not what I am proposing here.

But aside from that I do not like to write more code. I honestly don=E2=80=99t see the benefit of having this modifier in= the first place.
How =E2=80=9Calternative implementation 2=E2=80=9D works now i= s IMO just good. And it makes sense because it is limited to the `readonly` context.=C2=A0
There is no technical need for the modifier. As we see, because we have a working solution at hand.

For me: It is clear, it=E2=80=99s solving the main issue you rightfully brought up, and it is less code to write.

I can imagine that `cached` could be helpful on non `readonly` properties in some cases.
However, I feel that brings us almost in similar territory than immutable classes.=C2=A0
It is a whole new topic which I believe really shouldn=E2=80=99= t be part of this RFC that explicitly .
Can we please agree on that it is future scope whether or not non `readonly` hooks should get such a modifier?

I=E2=80=99d appreciate if we could settle with =E2=80=9Caltern= ative implementation 2=E2=80=9D as proposed.

Hi Nick, Claude,

I think it's important to explicitly mark it as "this value will be stored in memory", I mean just silently caching the get hook could quickly lead to unexpected behavior. Like one would expect the value to be changed and another one wonders why a big chunk of memory will not be freed `get =3D> $this->readBigFile();`.

On the one hand I like the cached modifier but personally I would prefer a separate init hook because it seems to be more clear that this is a backed property that will be initialized once.

The cached modifier I would expect to be an attribute applicable to any function which uses another cache store similar to how it's possible in python to memorize function calls which would be a very different feature.

Just my two cents from someone without voting rights



Cheers,
Nick















--------------MgDh31WiW0ZAKXrlo3c002qH-- --------------3opUmS1IR1y96ZV9q6vEkKBn Content-Type: application/pgp-keys; name="OpenPGP_0x3936ABF753BC88CE.asc" Content-Disposition: attachment; filename="OpenPGP_0x3936ABF753BC88CE.asc" Content-Description: OpenPGP public key Content-Transfer-Encoding: quoted-printable -----BEGIN PGP PUBLIC KEY BLOCK----- xsBNBFby8roBCAD4qHjbk9+V3SmB5DfpkTtX58jYJ9VXVfF54MDoI0fQiYvKyrrg hfO78alHc12RsEZxLH2F5kEfu8WO4wA4apg2gBnRRxqPj7krsct1ySOAdMrRVp8W taeaznpdcn2gJZyAMSI6LTzebT25N77ksvSrUi1BuCKyOa7SmYff3xGgOwYsHQlT 5opMNGPCVegiPmO/K37anwtsgj6L7RVtjXtp2Z3wAs6r3EmO318PL48xDLUgYMvE FAPJglth5FGH2En6n6HFIhxh43LqXQiNeHVjLjS2y8huNBswwc9ZVxk3ip5z/GCm pWnNkgGBOSJ7loJRsq2tOaU6yU8KWb5rhOoFABEBAAHNIU1hcmMgQmVubmV3aXR6 IDxtYXJjQG1hYmUuYmVybGluPsLAeAQTAQIAIgUCVvLyugIbAwYLCQgHAwIGFQgC CQoLBBYCAwECHgECF4AACgkQOTar91O8iM6jzggAwvV6MqU/hcAI6ldpxVjucGz2 J9cAWtva8GL+rm9zvEs7EENtamehJiZob/CTw50WiI/zsJzPblktpT0D2AFBEp9k P5/8CmCpZzxYPsxnLtsFM52fOBpO+aP0PSStBpJjndjBH7HPqKcTCXM3ZM+SL6ly RweAJR7G+JXIZbuUrbjB2lbGx3itNZ6TeXqqnE6KTXNKLEbNHfVdzE4sPDkmuZRo /M2h+gmeS1iQb29WBmhvL6czugCQI9rYl7C4Nci9wPii1lTYyfCWQfQKID4/F2Hi Ov+N/vDMCK1xV8TUeCy8w4X+nYj+wDog046ki9lUM60oPij6WoSJLqfsXr1kNc7A TQRW8vK6AQgAq7QYLB1Dz+8RSi5AGJP1tOFQXtcxyOhNVQZsI1mCQiHay4wteQ+5 m4EOUuR+FrFIlnbSrPdTkKD2wvQDHVqpZivThBpJvara/ick0wi2R3dasu1sPMu1 P6h1EwUsydhviNJB07aLfPAWD6eoqmGTd8236znIIq7mbnNpOnxIQxviTyELUekr Nw38uQtVzR6XZv9PAThA2o1J1JZID7QUpKcNyo9ebYlwxyS+xzhA4DLDqfD6O5sK oKvxEf2fIZeP0ETPpHNYk0WiWnmNoPy8eEY07LriYALVidBwPBcxus0wGoKf8Nun y2aE13SHmj0ioBI1bXMGJx3hEbvzXK6WrwARAQABwsBfBBgBAgAJBQJW8vK6AhsM AAoJEDk2q/dTvIjOkowIAI70P8U4j3eqyK/7x1bnCZZRcpwZ1aH+LR1yMKTINo9N DqlOBWQTLT69YMfV4UN+nTSiD/uLw1fSeLSzBwpoalCMLPVOX/d3Mq5JtL5cKtWU TIVf3Vb7VbN4Rvb8HgWjeSnM1PiG9yQBmLKI68sG/gdgvA/xANdUatkDgG0yj8PC dt+Vy4EblXbIAXZXJ6eRugSKowTjst7iHXKOJxivomHFcmqmkiqjwGTGx/jrhbDt EpPDRk+U9W45D4CbUcyPR6lMSrje5JPGQDv/45M5wPe286YelBjnb0cWRJpA7GZC WDKZOsQ2H6cCRBi8i4m+vfRk7GLA536XnmvWxKFVP9U=3D =3Doi2m -----END PGP PUBLIC KEY BLOCK----- --------------3opUmS1IR1y96ZV9q6vEkKBn-- --------------G2q29gslZ6QKifFY77j8EUMD-- --------------4aCiXRKVlKWQQ0K4QkF6ULwM Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature.asc" -----BEGIN PGP SIGNATURE----- wsB5BAABCAAjFiEENJIbKB0SAX2RmUKbOTar91O8iM4FAmhztsAFAwAAAAAACgkQOTar91O8iM72 WQgA3N6cmNMSqXcQp5ewqwP98EP6bwYe5DxHJQ6JCPbZSXJXC0UOPERqkzhCVK9AwDMOBZKfxH8d 0+iTxK2EzwZ9ueLoOwVJMIe72H78871VNcQfRiaKt6Vn9C7HcjYb44u7gt2Sf24tfn5ybamw9Bkl 8fggTYsLOBn0ThKzmJxAEOfQI3uqN1HZeofr+98geVUd45kcRfyW3orPlGLaOLqyF0S4W+JjqysQ e8d9DZolvi89p3IFfyjjIWdkKQMQ0P/Z72o3KA0HnnOmZUNewH34uF4AwhY4a/iPOndnHkQ1BaZw PUYv1c6bzSI6cPh+zc93R+46mVl2ECo+cirGi6ponA== =CzFB -----END PGP SIGNATURE----- --------------4aCiXRKVlKWQQ0K4QkF6ULwM--