---- En jue, 25 feb 2021 21:41:40 +0100 Nikita Popov <nikita....@gmail.com> escribió ---- > On Thu, Feb 25, 2021 at 8:11 PM Manuel Canga <p...@manuelcanga.dev> wrote: > > > Hi internals, > > > > I would like to present a possible new RFC( "class_name:namespace" ) for > > 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 = explode( '\\', MyClass::class ); > > array_pop($splited_class_name); > > echo $namespace = implode('\\', $splited_class_name ); > > ``` > > > > Other option is: > > > > ``` > > namespace MyProject\MyHelpers; > > > > class MyClass { > > public const NAMESPACE = __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 classes ) > > > > Don't you think the same ? > > > Could you please share the use case(s) you have in mind for this? > > Regards, > Nikita Hi, Nikita,
Yes, of course. For example, loading views using TemplateViews pattern[1]: ``` namespace MyProjects\Framework; abstract class TemplateView { private const VIEW_SUBPATH = '/views/'; protected function includeView( string $viewName ) { $filePath = str_replace('\\', '/', static::namespace ). self::VIEW_SUBPATH; $fileName =$filePath.$viewName.'.tpl'; 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 { public function __toString() { $this->includeView('full_budget'); } }``` Regards - P.S: Sorry, my mistake with subject. [1]: https://dzone.com/articles/practical-php-patterns/practical-php-patterns-9 -- Manuel Canga Zend Certified PHP Engineer Websites: https://manuelcanga.dev | https://trasweb.net Linkedin: https://es.linkedin.com/in/manuelcanga -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php