---- En jue, 25 feb 2021 21:41:40 +0100 Nikita Popov <[email protected]>
escribió ----
> On Thu, Feb 25, 2021 at 8:11 PM Manuel Canga <[email protected]> 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