Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:115430 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 5888 invoked from network); 16 Jul 2021 06:21:10 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 16 Jul 2021 06:21:10 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id D2FAE1804D8 for ; Thu, 15 Jul 2021 23:45:20 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,HTML_MESSAGE, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-Virus: No X-Envelope-From: Received: from mail-yb1-f182.google.com (mail-yb1-f182.google.com [209.85.219.182]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Thu, 15 Jul 2021 23:45:20 -0700 (PDT) Received: by mail-yb1-f182.google.com with SMTP id v189so13235534ybg.3 for ; Thu, 15 Jul 2021 23:45:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=pL96zo0a9KPDj8XhIYR3mmXY7nSfdyE0zANYGt/WR+w=; b=kY6HKdRm7nbCUWsNfFXI4v3cE+urXqPNx5qtBkG0xeo4eGEGJEi7PFj71ChNJWG5Qx zldxhdQdctd8WbgtmEfAuFNhZ9jqAKwM3WePrR5JjL72FnePOfVf+x13J/ER4nkBRQsi gukaN2D/mUyK2FO6Vqw4aGqEUr5dlCAS20/nAmDlgcUzvGKDllhLo5SueEMohYEXU15U +wptb2JkCSlUgzs/TuO/+y4zJpTc/7NOsGq9NIIm3OGkF1a/cYmVZUrGny5WKbGAmqG4 ystLsPWKhFsMsyyNiO7aSvmgPPcPm/O7S70OLfJsLpOLqnuRexQdpfCK9d0wqEODdk2a mtgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=pL96zo0a9KPDj8XhIYR3mmXY7nSfdyE0zANYGt/WR+w=; b=iSmRdgIEaWzkI3w5/+IuGHjTgBj138TyQoT7PFaIHcQpF9x5/xQVYNgfzxo8jNkwvZ 2NjVRpxsWPJgIQJuLJyRiPnJIBOLYzFViuWpUoIGt+ZWWYIWXbddExedCqOetgYCGlD0 u/HAK5QoSNto4QPtPfbGtF/LlNc9AmAQBi4yIVQx3fpAnvTGV9i2rI17pqUtCc20gxL3 3ZkZwC28WSYuMlbx9gL9yGse1VnIJb9t5ewvUZRKFY6DGdb77vOI8dIWyRWqzET6bdBj uyILayuJpiNOwPAwFMiPOtZQOTWQu8S10WOAer8QPmm0WTxNMVLMSfiOGOfe87hWJQ8q ASWA== X-Gm-Message-State: AOAM533/xQ7h2RkzTTOgpbxPGgp2DOByd1uVoo84qTeOjsFUOcPzaow9 NZ1eOw0kBV1IKBPiML2gmcJK/LLx7yw2kJ9yVI4yyzf4Y+jFzA== X-Google-Smtp-Source: ABdhPJyOSCys0xQbsR8RG2v5eEq3pwzaFKI3H2waULrVCvMf98wMP9p3YOCFL4VTrONQgm74fhLA0oP9Mp/GbRrUJOM= X-Received: by 2002:a25:71c4:: with SMTP id m187mr10634022ybc.397.1626417919432; Thu, 15 Jul 2021 23:45:19 -0700 (PDT) MIME-Version: 1.0 Date: Fri, 16 Jul 2021 09:45:08 +0300 Message-ID: To: PHP Internals Content-Type: multipart/alternative; boundary="000000000000581a3905c737ee06" Subject: Readonly properties - immutability by default From: zsidelnik@gmail.com (Eugene Sidelnyk) --000000000000581a3905c737ee06 Content-Type: text/plain; charset="UTF-8" This is replica of github PR comments: Hi there! Isn't it better to simplify this a bit? I mean `readonly` keyword is really long to type every time we need such property. Earlier (in php7.3) properties were defined only with visibility modifier. Now it is going to become *toooo verbose*. ```php class A { // 24 characters before actual property name readonly public string $name; readonly public string $another; public function __construct(string $var) { $this->name = $var; $this->another = $var; } } $a = new A('foo'); var_dump($a); ``` What seems for me to be better is remove `readonly` modifier at all, with somewhat different modification. Look at the code below. This is intended to work the same way as previous example. ```php class A { // 14 characters before actual property name public string name; public string another; public function __construct(string $var) { $this->name = $var; $this->another = $var; } } $a = new A('foo'); var_dump($a); ``` This is less explicit (we don't actually write `readonly` keyword), and it may be confusing for some programmer who is new to php. However after first attempt of modification, such layman will understand it's syntax and keep with it. Readonly properties are really useful for DDD, where everything is going to be immutable. It promotes best practices. However for people to use it, syntax should be concise and brief. @nikic , want to hear your thoughts on this. * kolardavid * 1 hour ago @rela589n First of all, you are coming late (as me before), since this RFC is already voted and implemented completely. Anyway, I find your suggestion bad. The truth is, that it is a bit more verbose, but I am OK with that. It might be annoying to write (word protected is even longer) but it is far better to read. It makes the code more clear. Human brain is very well "optimized" to notice words it is used to, more than symbols. This idea stays behind the fact that Delphi for example uses begin/end instead of { and } (even though I am kind of tired of it as well). Anyway, your solution of dropping $ for readonly property would be nightmare for everyone, not just beginners. I am sure that @nikic will say the same, since he seems as pedantic as I am about these things. Since all modifiers are already nice self-explaining word, there is no point in doing this differently for new modifier. It wouldn't be consistent, nor convenient. Mixed properties with and without $ sign would look like typo, not intention. * rela589n * 26 minutes ago The philosophy of the Functional Programming < http://en.wikipedia.org/wiki/Functional_programming> paradigm is strongly geared towards all "variables" being immutable, and "mutable" ones being only allowed in extreme cases (ie, for I/O. This will not look like a typo. Immutability should be provided by default. BTW, in future scope we can create "readonly" variables. So that once a variable is defined, no one can change its value. I oppose creating kind of `let` and `const` for this. * rela589n * 21 minutes ago > Anyway, your solution of dropping $ for readonly property would be nightmare for everyone, not just beginners It would be a nightmare if these values could be changed. As we can't rewrite `readonly` property, it looks like a constant. This concept of readonly properties should come along with constants not only by semantics, but also by syntax. * rela589n * 18 minutes ago > The truth is, that it is a bit more verbose, but I am OK with that. It might be annoying to write (word protected is even longer) but it is far better to read. We already have Java with it's verbose syntax. We should think what should be default and safe behaviour covering most cases and make such verbose constructions for cases not covered by default logic. --000000000000581a3905c737ee06--