---- 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

Reply via email to