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 &lt;rob@bottled.codes&gt;:<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:&gt;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--