Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:124607 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 qa.php.net (Postfix) with ESMTPS id 8DC1E1A00B7 for ; Fri, 26 Jul 2024 11:37:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=php.net; s=mail; t=1721993915; bh=cBQyIiWc4OvQOZm47bbJDUb8F8WhmzGL0TJhBlYP3PM=; h=Date:Subject:To:References:From:In-Reply-To:From; b=KrDxqwgDpUYgiWKr4xNIpKh9UncEL7BKoAWf1CNEsXKBDs5e6yDrxuQJ/tZkFv+Y0 fTyBBlFwaAKbtqrHxw80pEQCcDkNuvSeS/cAZq3KDkFmh00/HcG6ZZ8flqlNznZFyn T1F5pa3OU5m3XEKQiMtEA7fNkVGs5kHnAaP/tviEUmj4f9R3g9zaomNEEf8TMnhXn1 eiSvWA8QqE1lulI1N9foKYB9DgU9RKQ8ixkFfXwdZwY65TTilvn0frDP5ZkoeTGaR4 evLLcfIwOxnYAkj08dS/mmwODA/Pw/oyf2RfJpWxh2pE7+P01ZDIDcGQxUNIyqguJd g7V+rO5mkyVzg== Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 7F2F718005D for ; Fri, 26 Jul 2024 11:38:34 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=0.6 required=5.0 tests=BAYES_50,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,DMARC_PASS,HTML_MESSAGE, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=4.0.0 X-Spam-Virus: No X-Envelope-From: Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Fri, 26 Jul 2024 11:38:34 +0000 (UTC) Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-368440b073bso1233233f8f.0 for ; Fri, 26 Jul 2024 04:36:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=seld.be; s=google; t=1721993817; x=1722598617; darn=lists.php.net; h=in-reply-to:from:content-language:references:to:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=kxgjkNQBJoPIqxMQpdNwyHZW7527Hj3Ru55tj4m7Tx4=; b=cwCmmCi8T9dR1c3ecaLg721yas6gR8l0V7JeQr4d3SnCbBPbDTrhfcphjsWdsZhwYk K/riwA9kLu5TgkKhtDoAVYEIddDQBJuV+04NH3Yyh+lKpW2n3EeOD9l7ZhCQHSgpqgkO 4g0kLLgmwT2aBPwmyU8A8XKxWkwARLri5cSg31k1S2QGn7LtLQN6dHVTjNs2UstjbNxr 9YDkLQeEdYvbwJ16YGxewbp7gWrb8b/tZ3vq4dT+8+daSnMuEcU3Bs9CekIlee1qmEuA UmuqU/qfX2NQW7uG60IdQR6KPpLR148avjRKNktTiTflNFhm1Zdl03x4f+bUZLPn9pBy e5Pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721993817; x=1722598617; h=in-reply-to:from:content-language:references:to:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=kxgjkNQBJoPIqxMQpdNwyHZW7527Hj3Ru55tj4m7Tx4=; b=b60swxRZuwOD+0itSpjV/PE7p3NT+PsUArWdsdCKEqneagn4eELRzbYoYo5GGwcQDw +BX/xoKr6VKdAPemgQr/u2JOWDd5+4g3aLa4U/z08dij9B4zyvGk3CE1I1C1e4ZUnYrH 5bnjozRd5msfhpCgf5ZHEptCPxP1G+TO7NPmD+jRIaPAlBLNPhGYBALAwk6BIGooGPYh Tmp8dETNolvyFzDLkeIdFcBheNBC2/olvQTs+HiHXzizsfo/ZObf0wJUd+SPZZ2IL4id +InP+wJ/vGaxXCrJ1NEK055GN7d7SVtDyVtfO2meEtGy6DEG9tKACCKmUXzIcNaS9Z0l dL9A== X-Forwarded-Encrypted: i=1; AJvYcCUDJX22wLRPn0quzBngWW6amyypej4EIKNtlLXEH9nzBSWYndmxRdsxkMZxRCp0Pk7dXqScie2g3lyDg0jhPp2ZLLYVapKl7Q== X-Gm-Message-State: AOJu0Ywr52r+HzGbsgSqD/0jtswukS99QRnDu1IJFxEpnVYBgsyrnKvA P7Vz+V7Vw/RLQ19TswhewFGb5wFAN57B4000+DEe7GOuEoDJ0tr8BeNnj8Zgy5+QynjNKG9who5 Dg1w= X-Google-Smtp-Source: AGHT+IGhHW7nnWOYUJQUhitHSowpPnR6ptOUf+ueUGTISFM/nbxZvbFiP4OCE03hsUtASQywYwHpIQ== X-Received: by 2002:a5d:5743:0:b0:362:4679:b5a with SMTP id ffacd0b85a97d-369f66bbfb7mr5565395f8f.16.1721993817123; Fri, 26 Jul 2024 04:36:57 -0700 (PDT) Received: from ?IPV6:2a02:168:4b6e:0:c895:7592:a064:25f2? ([2a02:168:4b6e:0:c895:7592:a064:25f2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-36b367d939esm4893394f8f.25.2024.07.26.04.36.56 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 26 Jul 2024 04:36:56 -0700 (PDT) Content-Type: multipart/alternative; boundary="------------kxWL71HFU14BAlW669vrekOD" Message-ID: <4e7714cb-0d88-43f5-aa30-9adb799e0b28@seld.be> Date: Fri, 26 Jul 2024 13:36:55 +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] Asymmetric Visibility, v2 To: Rob Landers , internals@lists.php.net References: <0a6a61cd-f203-4dea-a7f8-97e6b885c52d@app.fastmail.com> <66c4ac1c-b3d7-4b20-b986-1fe1a464f485@app.fastmail.com> Content-Language: fr In-Reply-To: <66c4ac1c-b3d7-4b20-b986-1fe1a464f485@app.fastmail.com> From: j.boggiano@seld.be (Jordi Boggiano) This is a multi-part message in MIME format. --------------kxWL71HFU14BAlW669vrekOD Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 21.07.2024 11:21, Rob Landers wrote: > > On Sat, Jul 20, 2024, at 23:51, Larry Garfield wrote: >> On Sat, Jul 20, 2024, at 7:22 AM, Rodrigo Vieira wrote: >> > Will the alternative syntax on hook not even be put to a vote? >> >> It was, a year and a half ago when Aviz was first proposed.  The >> preference was split, but leaned toward the prefix-style syntax.  So >> we went with that.  I don't think we'll ever get everyone to want the >> same syntax, but we're using the one that was both somewhat more >> popular, and (as discussed in the RFC) arguably superior. >> >> As the "comments in yield from" thread has shown, *any* even slight >> change to PHP's syntax will require work from static analysis tools.  >> That's the nature of the problem space, regardless of the syntax >> specifics. >> >> --Larry Garfield >> > > Just to play devil’s advocate, it was also before we had property > hooks who advertised itself as a way to “wrap and guard access to > object properties” but we are simply ignoring their existence here. > Just to compare them, because my initial gut feel was to say "yes please just put this together with hooks".. As far as I understand these would be the two options? class C { public protected(set) $answer { get => 42; set => { $this->answer = $value * 2; } public private(set) $publicReadOnly; } class C { public $answer { get => 42; protected set => { $this->answer = $value * 2; } public $publicReadOnly { private set; } } And now that I see it spelled out more, I do agree that while it appears a bit more verbose, and this "(set)" looks odd at first, having all the visibility upfront is a lot clearer than having to read through the hooks to see what visibility applies. Best, Jordi -- Jordi Boggiano @seldaek -https://seld.be --------------kxWL71HFU14BAlW669vrekOD Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit
On 21.07.2024 11:21, Rob Landers wrote:

On Sat, Jul 20, 2024, at 23:51, Larry Garfield wrote:
On Sat, Jul 20, 2024, at 7:22 AM, Rodrigo Vieira wrote:
> Will the alternative syntax on hook not even be put to a vote?

It was, a year and a half ago when Aviz was first proposed.  The preference was split, but leaned toward the prefix-style syntax.  So we went with that.  I don't think we'll ever get everyone to want the same syntax, but we're using the one that was both somewhat more popular, and (as discussed in the RFC) arguably superior.

As the "comments in yield from" thread has shown, *any* even slight change to PHP's syntax will require work from static analysis tools.  That's the nature of the problem space, regardless of the syntax specifics.

--Larry Garfield


Just to play devil’s advocate, it was also before we had property hooks who advertised itself as a way to “wrap and guard access to object properties” but we are simply ignoring their existence here.

Just to compare them, because my initial gut feel was to say "yes please just put this together with hooks"..

As far as I understand these would be the two options?

     class C {
         public protected(set) $answer { get => 42; set => { $this->answer = $value * 2; }
         public private(set) $publicReadOnly;
     }


     class C {
         public $answer { get => 42; protected set => { $this->answer = $value * 2; }
         public $publicReadOnly { private set; }
     }

And now that I see it spelled out more, I do agree that while it appears a bit more verbose, and this "(set)" looks odd at first, having all the visibility upfront is a lot clearer than having to read through the hooks to see what visibility applies.

Best,
Jordi

-- 
Jordi Boggiano
@seldaek - https://seld.be
--------------kxWL71HFU14BAlW669vrekOD--