Uh oh!
There was an error while loading. Please reload this page.
Implement readonly properties - #7089
Conversation
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
matthieu88160
commented
Jun 16, 2021
Hi all, |
@matthieu88160 Constants are by definition readonly. Not sure how that would make sense. Also note that the mailing list is the primary tool for feedback when it comes to specification. |
matthieu88160
commented
Jun 16, 2021
My bad, I was thinking modification was allowed. |
iluuu1994
commented
Jun 16, 2021
@nikic Here are two more tests for useful use-cases of overriding a --TEST--
Visibility can change in readonly property
--FILE--
<?phpclass A {
protected readonly int $prop;
publicfunction__construct() {
$this->prop = 42;
}
}
class B extends A {
publicreadonlyint$prop;
}
$a = newA();
try {
var_dump($a->prop);
} catch (\Error$error) {
echo$error->getMessage() . "\n";
}
$b = newB();
var_dump($b->prop);
?>
--EXPECT--
Cannot access protected property A::$prop
int(42)--TEST--
Can override readonly property with attributes
--FILE--
<?php
#[Attribute]
class FooAttribute {}
class A {
publicreadonlyint$prop;
publicfunction__construct() {
$this->prop = 42;
}
}
class B extends A {
#[FooAttribute]
publicreadonlyint$prop;
}
var_dump((newReflectionProperty(B::class, 'prop'))->getAttributes()[0]->newInstance());
?>
--EXPECT--
object(FooAttribute)#1 (0) {
} |
Uh oh!
There was an error while loading. Please reload this page.
Method parameters can be readonly: |
kolardavid
commented
Jul 5, 2021
Hey guys, I would like to add my few objections you might want to consider:
Of course there is option to merge both behaviors by adding modifier to readonly - so having Thank you for your attention and considering this opinions :) |
kocsismate
commented
Jul 5, 2021
Please note that the feature is currently in voting, so any change should be warranted very much. Points 3 and 4 have already been discussed to death, I believe the RFC provides background information why the Implementing an Point 1 would render the feature broken, since any property value could be changed in private scope at any time, simply by unsetting it first. |
nikic
commented
Jul 5, 2021
is_initialized() was recently discussed and declined (https://externals.io/message/114607). |
kolardavid
commented
Jul 5, 2021
OK guys, thanks for your reply and sorry to bother you :) |
1bc5f49 to
c890185Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
KalleZ
commented
Jul 16, 2021
Please keep these comments to the mailing list, the PR is not a forum for such |
rela589n
commented
Jul 16, 2021
via email
Noted. …On Fri, Jul 16, 2021 at 9:28 AM Kalle Sommer Nielsen < ***@***.***> wrote:
Please keep these comments to the mailing list, the PR is not a forum for
such
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#7089 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/AJ5JVLQ7DVUE2BCE2EGBXLLTX7GRFANCNFSM456ZXYQQ>
.
|
fe4c9e0 to
2137465CompareThere was a test checking this, but it didn't actually have the correct result, duh.
There's only one possible set of flags for objects, and the assigned type is hardcoded anyway.
jellynoone
commented
Jul 23, 2021
Hi, @nikic just tried this out, is it intentional that it's now possible to skip the public visibility modifer in promoted properties and regular class ClassName
{
readonlyint$prop1;
function__construct(
readonly array $prop2,
) {
$this->prop1 = \count($prop2);
}
}
\var_dump(newClassName([1,2])); |
jrfnl
commented
Aug 3, 2021
Just FYI as I didn't see mention of the impact of If nothing else, this affects WordPress - and by extension potentially all plugins and themes in its ecosphere. So far, the impact is estimated to be relatively small as the function (to add the |
This comment has been minimized.
This comment has been minimized.
iluuu1994
commented
Aug 3, 2021
Please use the mailing list for these discussions. The repercussions of a keyword are clear to voters. The suggestion of no $ was mentioned on the mailing list and not well received. While it avoids the BC break it's very subtle and doesn't communicate intent well. It's also way to late for this discussion in the first place. This RFC was in discussion for months. |
* PHP 8.1 | MigrationGuide/New constants: add missing constants [1] > * Added CURLOPT_DOH_URL option > * Added certificate blob options when for libcurl >= 7.71.0: > > CURLOPT_ISSUERCERT_BLOB > CURLOPT_PROXY_ISSUERCERT > CURLOPT_PROXY_ISSUERCERT_BLOB > CURLOPT_PROXY_SSLCERT_BLOB > CURLOPT_PROXY_SSLKEY_BLOB > CURLOPT_SSLCERT_BLOB > CURLOPT_SSLKEY_BLOB Refs: * https://github.com/php/php-src/blob/f67986a9218f4889d9352a87c29337a5b6eaa4bd/UPGRADING#L220-L229 * php/php-src#6612 * php/php-src@3dad63b * php/php-src#7194 * php/php-src@b11785c * PHP 8.1 | MigrationGuide/New constants: add missing constants [2] > GD: > * Avif support is now available through the `imagecreatefromavif()` and > `imageavif()` functions, if libgd has been built with avif support. While not mentioned in the changelog entry, the commit to PHP does contain a new constant declaration... Refs: * https://github.com/php/php-src/blob/f67986a9218f4889d9352a87c29337a5b6eaa4bd/UPGRADING#L245-L247 * php/php-src#7026 * php/php-src@81f6d36#diff-00d1efef2247b288c86a6c3bfefac111a4774fbc5453fdc02dcf36c4a23da283R373 > GD: > * `imagewebp()` can do lossless WebP encoding by passing `IMG_WEBP_LOSSLESS` as > quality. This constant is only defined, if a libgd is used which supports > lossless WebP encoding. Refs: * https://github.com/php/php-src/blob/3a71fcf5caf042a4ce8a586a6b554fd70432e1e2/UPGRADING#L568-L571 * php/php-src#7348 * php/php-src@eb6c9eb * PHP 8.1 | MigrationGuide/New constants: add missing constants [3] > Added `POSIX_RLIMIT_KQUEUES` and `POSIX_RLIMIT_NPTS`. These rlimits are only available on FreeBSD. Refs: * https://www.php.net/manual/en/migration81.new-features.php#migration81.new-features.posix * php/php-src#6608 * php/php-src@ebca8de * PHP 8.1 | MigrationGuide/New constants: add missing constants [4] Refs: * https://wiki.php.net/rfc/readonly_properties_v2 * php/php-src#7089 * php/php-src@6780aaa * PHP 8.1 | MigrationGuide/New constants: add missing constants [5] While not mentioned anywhere at all, the commit to PHP itself adding support for the Sodium xchacha* functions, does declare a couple of new constants as well... Refs: * php/php-src#6868 * php/php-src@f7f1f7f#diff-3fe4027560fd299248af1dc1efe04287cc2b6418e8f01755c05c9db64b668b1eR352-R357 While not mentioned anywhere at all, the commit to PHP itself adding support for the Sodium ristretto255* functions, also declares a number of new constants as well... Refs: * php/php-src#6922 * php/php-src@9b794f8#diff-3fe4027560fd299248af1dc1efe04287cc2b6418e8f01755c05c9db64b668b1eR368-R381 Co-authored-by: jrfnl <jrfnl@users.noreply.github.com> ClosesGH-1449.
> Readonly properties > > Support for `readonly` has been added. Refs: * https://www.php.net/manual/en/migration81.new-features.php#migration81.new-features.core.readonly * https://wiki.php.net/rfc/readonly_properties_v2 * php/php-src#7089 * php/php-src@6780aaa Includes unit tests. Includes sniff documentation.
* PHP 8.1 | MigrationGuide/New constants: add missing constants [1] > * Added CURLOPT_DOH_URL option > * Added certificate blob options when for libcurl >= 7.71.0: > > CURLOPT_ISSUERCERT_BLOB > CURLOPT_PROXY_ISSUERCERT > CURLOPT_PROXY_ISSUERCERT_BLOB > CURLOPT_PROXY_SSLCERT_BLOB > CURLOPT_PROXY_SSLKEY_BLOB > CURLOPT_SSLCERT_BLOB > CURLOPT_SSLKEY_BLOB Refs: * https://github.com/php/php-src/blob/f67986a9218f4889d9352a87c29337a5b6eaa4bd/UPGRADING#L220-L229 * php/php-src#6612 * php/php-src@3dad63b * php/php-src#7194 * php/php-src@b11785c * PHP 8.1 | MigrationGuide/New constants: add missing constants [2] > GD: > * Avif support is now available through the `imagecreatefromavif()` and > `imageavif()` functions, if libgd has been built with avif support. While not mentioned in the changelog entry, the commit to PHP does contain a new constant declaration... Refs: * https://github.com/php/php-src/blob/f67986a9218f4889d9352a87c29337a5b6eaa4bd/UPGRADING#L245-L247 * php/php-src#7026 * php/php-src@81f6d36#diff-00d1efef2247b288c86a6c3bfefac111a4774fbc5453fdc02dcf36c4a23da283R373 > GD: > * `imagewebp()` can do lossless WebP encoding by passing `IMG_WEBP_LOSSLESS` as > quality. This constant is only defined, if a libgd is used which supports > lossless WebP encoding. Refs: * https://github.com/php/php-src/blob/3a71fcf5caf042a4ce8a586a6b554fd70432e1e2/UPGRADING#L568-L571 * php/php-src#7348 * php/php-src@eb6c9eb * PHP 8.1 | MigrationGuide/New constants: add missing constants [3] > Added `POSIX_RLIMIT_KQUEUES` and `POSIX_RLIMIT_NPTS`. These rlimits are only available on FreeBSD. Refs: * https://www.php.net/manual/en/migration81.new-features.php#migration81.new-features.posix * php/php-src#6608 * php/php-src@ebca8de * PHP 8.1 | MigrationGuide/New constants: add missing constants [4] Refs: * https://wiki.php.net/rfc/readonly_properties_v2 * php/php-src#7089 * php/php-src@6780aaa * PHP 8.1 | MigrationGuide/New constants: add missing constants [5] While not mentioned anywhere at all, the commit to PHP itself adding support for the Sodium xchacha* functions, does declare a couple of new constants as well... Refs: * php/php-src#6868 * php/php-src@f7f1f7f#diff-3fe4027560fd299248af1dc1efe04287cc2b6418e8f01755c05c9db64b668b1eR352-R357 While not mentioned anywhere at all, the commit to PHP itself adding support for the Sodium ristretto255* functions, also declares a number of new constants as well... Refs: * php/php-src#6922 * php/php-src@9b794f8#diff-3fe4027560fd299248af1dc1efe04287cc2b6418e8f01755c05c9db64b668b1eR368-R381 Co-authored-by: jrfnl <jrfnl@users.noreply.github.com> ClosesphpGH-1449.
RFC: https://wiki.php.net/rfc/readonly_properties_v2