Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:127022 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 6142B1A00BC for <internals@lists.php.net>; Wed, 2 Apr 2025 05:55:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=php.net; s=mail; t=1743573193; bh=vRh4YxToALS9JH1XHragdQmrgxF/sKs2lAgVZr5Ug+w=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=c3/zJpvuhCVy+whnWmbK9hSob455btgUiEoOp+zc8llZcw4PxiaV4FytyLYTObK2v B0Q0VmOs3hfuT5b8ofqywSn3SBlr+XAMn8Bcgn2OrsFnyngLrKrdcx4R1AFsWsB9rD //UbLaVHsth7g6YurAwAsKLXTsdQgbI/QzNlS/+0/qdBc79cuaiIXJuUuW/3KxoeAk u7OgAyrxp8O+3hjkQ/eH00FvfUyo4sb98X1Se0yzkR0pG7g4NnmTFe/yrQN2vHUUVG 2B3fUZDoxhVEg1Ox7Qf8MdXM6FatQzZnvIuZK2HYpU5p8oqmNCugBBHea6t4bFv5Vf QyjbTiEuZJsPw== Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 78B9E18006F for <internals@lists.php.net>; Wed, 2 Apr 2025 05:53:12 +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.2 required=5.0 tests=BAYES_40,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,DMARC_PASS,FREEMAIL_FROM, HTML_MESSAGE,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL, SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=4.0.0 X-Spam-Virus: No X-Envelope-From: <dev.999.victor@gmail.com> Received: from mail-qt1-f173.google.com (mail-qt1-f173.google.com [209.85.160.173]) (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 <internals@lists.php.net>; Wed, 2 Apr 2025 05:53:12 +0000 (UTC) Received: by mail-qt1-f173.google.com with SMTP id d75a77b69052e-476ac73c76fso68600511cf.0 for <internals@lists.php.net>; Tue, 01 Apr 2025 22:55:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743573338; x=1744178138; darn=lists.php.net; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=+6EQfuMopcVq/ikQpDtsAGMVBQ9v0wV4FVuCzCIZoQI=; b=QLPdRq6E03pQNOYhSzG/kQH55p5dECCC0biNvbRHdEOcY7R/KDU+Tbfrv1boM5bWhP 8QI99qsAjZqAmtwyGt5HL8T4KLhL3hP3H/Ln0qxlxwAZKATHz3+BXzrBhpT1BHndevyA AHEVRY70d4JRuRE8ScSM8IzmcHzPP8/uBgZjlUCH70NpkIyrboguods82hS504eOgEnA a0e+66kPruIndWXAAnyPtKIyCSXTwLz3X6DrHlKpptAmmpSLZF0jWCoLCuCEFfu+acZe sMwrVgZbYwGWc99ZqYOKKtgUZhY186caSEHL6lfdL3Bp0O2hmxU8Q6yCLv/+yqBy8UKg B3aA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743573338; x=1744178138; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=+6EQfuMopcVq/ikQpDtsAGMVBQ9v0wV4FVuCzCIZoQI=; b=DTO/m4zNz5eS+wqLUebYjg4UYXnuMgHqHP0af38hwit793xQBsM/iVMOspQOH/PBxS 4mmuJNrOaU4McAEEJRU0LZmL7cg0zzB1eKLBZ60nCpkkFvJPoHl8WY+xi/Jx8G6nZu6q gC0hTVAT/O4WkwkdbIgguoA9x3Jqy+PQxGaudrCzUtaNSpWinmfdi5/fpdyqRSOrUJw1 M6NlhNYL1RA3rQBy+//YBjTM06FEX6nsitCFpL1NyC0ddW3qOr1CR+LMMlk8FvaSKyEm qLZuzqh0qSiktnNzEJ9dR1+Fmn214OSJM7WvQn2gwtPG+VwNmb1V1/8DV5xBQMa6fVZQ WcaQ== X-Gm-Message-State: AOJu0YyOBi3bz0b6ytxm6zX+FOD4YhcWaGE3spYsGC5u/tvYjbSBDcaw PsVilS/OoxBEnEbrDC1EYBe/EgDVbsujI4/5fx0I3QDV2EpvINp0+Hjm64v80kV0NPAhnEnNl6H 1tKTu77dkiEYICV8yus1jxtUS6MxBp4Lj X-Gm-Gg: ASbGncukMO8o4gtlvI9YCKwKKrAKwC/vo/5zAUhbULjdisFA564xdFReJnFkgOlEeYI s10T1JrYsQP3urRt9HvGEg97DwyHqckgflY0yMNlFABVkT/3FsMGSusK8rhfqpuArcv5FOFxoZ9 NpajlDdL8OkuzBh1vIv39/FifdPQ== X-Google-Smtp-Source: AGHT+IHwBb9kWR61ZY8JkmsISASEf1wTS2vzbSkRO2ibQX6L6bQ+gKGJCY4zqG0Ai6VxLg6dklf2VUOGM5TBJYUBgrs= X-Received: by 2002:a05:622a:453:b0:476:9017:bbf1 with SMTP id d75a77b69052e-477ed747498mr237018381cf.46.1743573337797; Tue, 01 Apr 2025 22:55:37 -0700 (PDT) Precedence: bulk list-help: <mailto:internals+help@lists.php.net list-unsubscribe: <mailto:internals+unsubscribe@lists.php.net> list-post: <mailto:internals@lists.php.net> List-Id: internals.lists.php.net x-ms-reactions: disallow MIME-Version: 1.0 References: <aae32397-0567-417f-adbe-6b663d5c49ae@app.fastmail.com> <CAO__Xv4END_NsATOGSnCArGuP_UmSpMxSMsSNPsQZnLooOWTsQ@mail.gmail.com> <3e4ba7ea-a154-452d-abfc-05ef1322fade@app.fastmail.com> <AM8P250MB0170DE2A7E1AEE1FE1ED1F7CE2DF2@AM8P250MB0170.EURP250.PROD.OUTLOOK.COM> <782d76d9-711a-4cee-ae0e-fe0d69973f53@app.fastmail.com> <DU2P250MB0176FD3F525DFCA32D5A55D6E2DE2@DU2P250MB0176.EURP250.PROD.OUTLOOK.COM> <48dce917-d147-456b-9f03-c7e23411adff@app.fastmail.com> <AM8P250MB0170601416CA1D75F128D80FE2D92@AM8P250MB0170.EURP250.PROD.OUTLOOK.COM> <8a16b81c-7dab-4523-a352-76ba0cb4e771@app.fastmail.com> <AM8P250MB0170CA8F8094797B55ADE424E2D82@AM8P250MB0170.EURP250.PROD.OUTLOOK.COM> <9c4ac301-dfb2-49da-90e5-37a2824fc4e3@app.fastmail.com> <AM8P250MB0170330066F90E056EBA76F8E2D82@AM8P250MB0170.EURP250.PROD.OUTLOOK.COM> <5b1e6d70-a1c9-455c-93d3-6b22cf1fef11@app.fastmail.com> <CAF-mU4zuja0XfemEyC8sJs=+in6Q6F3An7fzWB9+1o31o=Y-8w@mail.gmail.com> <efcac45a-60ac-4145-b012-72d5fef0090c@app.fastmail.com> <52d84a5b-09d3-4e42-9620-a62fb239c21e@app.fastmail.com> <09a82882-f1ee-4bdb-8a27-e46144a711f1@app.fastmail.com> <706e22d7-94eb-44bd-a280-f629ba93b630@app.fastmail.com> <25b9205e-cb96-4746-91d2-11bf7fff7edb@app.fastmail.com> In-Reply-To: <25b9205e-cb96-4746-91d2-11bf7fff7edb@app.fastmail.com> Date: Wed, 2 Apr 2025 08:54:59 +0300 X-Gm-Features: AQ5f1JrIULiBEKd-2BxztgNHctEdtrh_tbmV9b86Ys399eHBTIqDjSwUl527rlc Message-ID: <CAA0W4qJ+eDJ_5NRRa9VHdcKEbwBTR5Ph6Vjd=bUtFo3pQP4QVg@mail.gmail.com> Subject: Re: [PHP-DEV] RFC: Nested Classes (was: short and inner classes) To: Rob Landers <rob@bottled.codes> Cc: internals@lists.php.net Content-Type: multipart/alternative; boundary="000000000000707b7e0631c54d35" From: dev.999.victor@gmail.com (Viktor Khramov) --000000000000707b7e0631c54d35 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Rob. The examples in this RFC only describe usage within classes as far as I can see. Does this finally solve the factory methods issue? https://externals.io/message/126452 =D0=BF=D0=BD, 31 =D0=BC=D0=B0=D1=80. 2025=E2=80=AF=D0=B3. =D0=B2 23:38, Rob= Landers <rob@bottled.codes>: > On Mon, Mar 31, 2025, at 21:45, Rob Landers wrote: > > Hello internals, > > I have significantly revamped the RFC (again). Key changes to the RFC: > > 1. More (realistic) examples, > 2. Since enums are basically specialized classes, they are allowed to be > nested as well (hat tip to Reddit), > 3. Using backslash as the class separator, > 4. Proper scoping (and shadowing), > 5. Nesting is allowed in interfaces and enums as well as classes; but not > traits, > 6. (Hopefully) Clearer wording, > 7. Nesting in traits, or nested traits, are future scope, > 8. Nested interfaces are future scope too. > > Some benefits of using \ as a separator: > > - a simple name can refer to nested classes: > > Scope resolution was expanded to treat inner classes within the same clas= s > as =E2=80=9Cin scope.=E2=80=9D This provides a more natural usage: > > class Outer { > class Inner {} > public function foo(Inner $inner) {} > } > > - Standard =E2=80=9Cuse=E2=80=9D statements can alias them: > > use Outer\Inner as Inner; > > But it also has some draw backs: > > - The engine doesn=E2=80=99t know that Outer\Inner is a nested class and > autoloaders will have to account for that. It will only ask for Outer\Inn= er. > > - You cannot simply refer to parent:>Inner, you have to explicitly ask fo= r > the parent by name: SomeParentClass\Inner. > > A draft implementation (which is more of a proof-of-concept) is available > on GitHub. > > > I accidentally forgot to include the link to the RFC: > https://wiki.php.net/rfc/short-and-inner-classes > > =E2=80=94 Rob > --000000000000707b7e0631c54d35 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div><div>Hi Rob.<br><span class=3D"gmail-HwtZe" lang=3D"e= n"><span class=3D"gmail-jCAhz gmail-ChMk0b"><span class=3D"gmail-ryNqvb">Th= e examples in this RFC only describe usage within classes</span></span></sp= an><span class=3D"gmail-HwtZe" lang=3D"en"><span class=3D"gmail-jCAhz gmail= -ChMk0b"><span class=3D"gmail-ryNqvb"> as far as I can see.</span></span></= span></div>Does this finally solve the factory methods issue? <a href=3D"ht= tps://externals.io/message/126452">https://externals.io/message/126452</a><= br></div></div><br><div class=3D"gmail_quote gmail_quote_container"><div di= r=3D"ltr" class=3D"gmail_attr">=D0=BF=D0=BD, 31 =D0=BC=D0=B0=D1=80. 2025=E2= =80=AF=D0=B3. =D0=B2 23:38, Rob Landers <rob@bottled.codes>:<br></div= ><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border= -left:1px solid rgb(204,204,204);padding-left:1ex"><div class=3D"msg1710342= 57848697083"><u></u><div><div>On Mon, Mar 31, 2025, at 21:45, Rob Landers w= rote:<br></div><blockquote type=3D"cite" id=3D"m_171034257848697083qt"><div= >Hello internals,<br></div><div><br></div><div>I have significantly revampe= d the RFC (again). Key changes to the RFC:<br></div><div><br></div><div>1. = More (realistic) examples,<br></div><div>2. Since enums are basically speci= alized classes, they are allowed to be nested as well (hat tip to Reddit),<= br></div><div>3. Using backslash as the class separator,<br></div><div>4. P= roper scoping (and shadowing),<br></div><div>5. Nesting is allowed in inter= faces and enums as well as classes; but not traits,<br></div><div>6. (Hopef= ully) Clearer wording,<br></div><div>7. Nesting in traits, or nested traits= , are future scope,<br></div><div>8. Nested interfaces are future scope too= .<br></div><div><br></div><div>Some benefits of using \ as a separator:<br>= </div><div><br></div><div>- a simple name can refer to nested classes:<br><= /div><div><br></div><div>Scope resolution was expanded to treat inner class= es within the same class as =E2=80=9Cin scope.=E2=80=9D This provides a mor= e natural usage:<br></div><div><br></div><div>class Outer {<br></div><div>= =C2=A0 class Inner {}<br></div><div>=C2=A0 public function foo(Inner $inner= ) {}<br></div><div>}<br></div><div><br></div><div>- Standard =E2=80=9Cuse= =E2=80=9D statements can alias them:<br></div><div><br></div><div>use Outer= \Inner as Inner;<br></div><div><br></div><div>But it also has some draw bac= ks:<br></div><div><br></div><div>- The engine doesn=E2=80=99t know that Out= er\Inner is a nested class and autoloaders will have to account for that. I= t will only ask for Outer\Inner.<br></div><div><br></div><div>- You cannot = simply refer to parent:>Inner, you have to explicitly ask for the parent= by name: SomeParentClass\Inner.=C2=A0<br></div><div><br></div><div>A draft= implementation (which is more of a proof-of-concept) is available on GitHu= b.<br></div></blockquote><div><br></div><div>I accidentally forgot to inclu= de the link to the RFC:=C2=A0<a href=3D"https://wiki.php.net/rfc/short-and-= inner-classes" target=3D"_blank">https://wiki.php.net/rfc/short-and-inner-c= lasses</a><br></div><div><br></div><div id=3D"m_171034257848697083sig121229= 152">=E2=80=94 Rob<br></div></div></div></blockquote></div> --000000000000707b7e0631c54d35--