Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:113273 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 56695 invoked from network); 25 Feb 2021 21:51:20 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 25 Feb 2021 21:51:20 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 69FC81804E4 for ; Thu, 25 Feb 2021 13:40:23 -0800 (PST) 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,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-Virus: No X-Envelope-From: Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Thu, 25 Feb 2021 13:40:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614289219; cv=none; d=zohomail.com; s=zohoarc; b=eh6/WPd+rx9aLayX2Eiyso34a4Hl4DN+qBsRAFWV07frIR8IciVXIaK36VZBjvOy/xxFetI77eB4tYqNnpfnXw+qEJaAgi3eFKzHNp8N8jlzHjyY40L5Pv4quBUSLb9G9aaymWas0Ea1rnS2KzUIjLWVWzI1RNfx4rqhbwQxjvE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614289219; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=T2+VboipQFCVeR03mYDS0Jh5rKMYNss5f9au4CUUZVg=; b=MwYp57UNfqqpVlaqQSSwyTLSCoXuGn7/wXI7NZM1pO94pb1TnTxlCw7Bj3+svBaKU7mziX1yywICOzsTvQixVbOmXi+G8jPBvKCKe4trcuzfLyIjkDJyCTHi0cE2RdRTVgNqQAgItUHtgPWZAMX+VYYeqgvpmTs4/OzkpSVk3RU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=manuelcanga.dev; spf=pass smtp.mailfrom=php@manuelcanga.dev; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1614289218; s=zoho; d=manuelcanga.dev; i=php@manuelcanga.dev; h=Date:From:To:Cc:Message-ID:In-Reply-To:References:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding; bh=T2+VboipQFCVeR03mYDS0Jh5rKMYNss5f9au4CUUZVg=; b=B9s5YvwX44Plur85dZJ993qi0YlOKZb2xgqAj84cPF2pUrxuqQeNp0QPLOFa27zM l54vj0A/o8WNQAZ/Sz2ZHRCkvz3Vc8AfkIALq8Fd0+8YUmx7G9lO3esyF3PVXCDhm0q ScYGnQ4uUYW7ePtnGoI5T6DO5PWDWrRctLPC4UzE= Received: from mail.zoho.com by mx.zohomail.com with SMTP id 1614289186048819.762099237157; Thu, 25 Feb 2021 13:39:46 -0800 (PST) Date: Thu, 25 Feb 2021 22:39:46 +0100 To: "Nikita Popov" Cc: "Internals" Message-ID: <177db219176.d0703af5721028.3912178391371376880@manuelcanga.dev> In-Reply-To: References: <177da98a052.c500761c696204.3345368100437568281@manuelcanga.dev> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Importance: Medium User-Agent: Zoho Mail X-Mailer: Zoho Mail Subject: Re: [PHP-DEV] [RFC] class_name:namespace From: php@manuelcanga.dev (Manuel Canga) ---- En jue, 25 feb 2021 21:41:40 +0100 Nikita Popov escribi=C3=B3 ---- > On Thu, Feb 25, 2021 at 8:11 PM Manuel Canga wrote= : >=20 > > Hi internals, > > > > I would like to present a possible new RFC( "class_name:namespace" ) f= or > > your consideration. > > > > As you know, namespaces are very important nowdays. They are used in > > autoloaders, Frameworks, CMS, ... > > > > Maybe, you are used to code something similar to this: > > > > ``` > > use MyProject\MyHelpers\MyClass; > > > > echo substr( MyClass::class, 0, strrpos( MyClass::class, '\\')); > > ``` > > > > or perhaps: > > > > ``` > > use MyProject\MyHelpers\MyClass; > > > > $splited_class_name =3D explode( '\\', MyClass::class ); > > array_pop($splited_class_name); > > echo $namespace =3D implode('\\', $splited_class_name ); > > ``` > > > > Other option is: > > > > ``` > > namespace MyProject\MyHelpers; > > > > class MyClass { > > public const NAMESPACE =3D __NAMESPACE__; > > } > > ``` > > > > However... :( > > > > ``` > > namespace MyProject\MyServices; > > > > class MyNewClass extends MyClass{ > > } > > > > echo MyNewClass::NAMESPACE; //MyProject\MyHelpers > > ``` > > > > All of these examples are ways for getting a thing which PHP compiler > > would resolver fast. > > > > It would be fantastic can code: > > > > MyClass::namespace or static::namespace( for example, in abstract clas= ses ) > > > > Don't you think the same ? >=20 >=20 > Could you please share the use case(s) you have in mind for this? >=20 > Regards, > Nikita =20 Hi, Nikita, Yes, of course. For example, loading views using TemplateViews pattern[1]:= =20 ``` namespace MyProjects\Framework; abstract class TemplateView { private const VIEW_SUBPATH =3D '/views/'; protected function includeView( string $viewName ) { $filePath =3D str_replace('\\', '/', static::namespace ). self::VI= EW_SUBPATH; $fileName =3D$filePath.$viewName.'.tpl'; =20 if( file_exists($fileName) ) { return include $fileName; } error_log("Not found view[$viewName] in path $filePath" }; } } ``` ``` namespace MyProject\CMS\Freelancer\Attachments; class Budget extends TemplateView { =20 public function __toString() { $this->includeView('full_budget'); } }``` Regards - P.S: Sorry, my mistake with subject.=20 [1]: https://dzone.com/articles/practical-php-patterns/practical-php-patter= ns-9 -- Manuel Canga Zend Certified PHP Engineer=20 Websites: https://manuelcanga.dev | https://trasweb.net Linkedin: https://es.linkedin.com/in/manuelcanga