Hi all,

I don't know how the internal development process of PHP works.

First at all: was this feature approved?

if that is a "yes"...
is this feature going to be scheduled for some release?
Is it supposed that I will submit a patch?

Thanks you all,
 Martin Scotta


On Sun, Jan 9, 2011 at 11:07 AM, Martin Vium <mar...@sitevision.dk> wrote:

> I think adding a magic constant or method for getting the class name would
> be usefull in many scenarios, when referencing a specific class (e.g.
> factories, configurations). It would also work well with namespaces and
> refactoring tools e.g.:
>
> $mock = $this->getMock('\\My\\Custom\\Namespace\\MyClass');
>
> vs.
>
> use My\Custom\Namespace\MyClass;
> $mock = $this->getMock(MyClass::CLASS);
>
> On 8 January 2011 11:21, Ben Schmidt <mail_ben_schm...@yahoo.com.au>
> wrote:
>
> > I think doing something like this is a good idea for classes and
> > interfaces.
> >
> > Ben.
> >
> >
> >
> >
> > On 7/01/11 1:16 AM, Martin Scotta wrote:
> >
> >> Yes, my intention was to only add a magic constant with the class,
> similar
> >> to this
> >>
> >> namespace Bar {
> >>   class Foo {
> >>     const KLASS = __CLASS__;
> >>   }
> >> }
> >>
> >> namespace Buzz {
> >>   use \Bar\Foo as BazFoo;
> >>
> >>   class Bar extends BazFoo {
> >>     const KLASS = __CLASS__;
> >>   }
> >>
> >>   $bar = new Bar;
> >>   $baz = new BazFoo;
> >>
> >>   var_dump( get_class($baz), BazFoo::KLASS);
> >>   var_dump( get_class($bar), Bar::KLASS );
> >> }
> >>
> >> This is 100% valid PHP 5.3.3 code, but that includes a lot of effort
> from
> >> the developer. Someone miss to include the KLASS constant on a class and
> >> the
> >> result is undefined.
> >>
> >> If that PHP could add a magic constant --named CLASS or whatever you
> >> like--
> >> to each class it will reduce the amount of class names hardcoded onto
> >> strings, probably to zero.
> >>
> >> The only issue that I found today is related to interfaces. I'm not sure
> >> if
> >> they should include this sort of magic constant, but I would rather
> >> include
> >> them just for consistency but, as I previously said, I'm not sure about
> >> this
> >> one.
> >>
> >>  Martin Scotta
> >>
> >>
> >> 2011/1/5 John LeSueur<john.lesu...@gmail.com>
> >>
> >>
> >>>
> >>> 2011/1/5 Johannes Schlüter<johan...@php.net>
> >>>
> >>>  On Wed, 2011-01-05 at 21:53 -0300, Martin Scotta wrote:
> >>>>
> >>>>> $obj = newInstance( MyClass ); // notice. undefined constant MyClass
> >>>>>
> >>>>
> >>>> This describes the major change with your idea.
> >>>>
> >>>> What happens if a constant MyClass exists?
> >>>>
> >>>> Another question is something like this:
> >>>>
> >>>> <?php
> >>>> function  factory($class) {
> >>>>    return new $class();
> >>>> }
> >>>>
> >>>> factory( SomeClass );
> >>>> ?>
> >>>>
> >>>>
> >>>> To proper support this we'd have to make classes first class elements.
> >>>> For making this consistent it would make sense to make functions first
> >>>> class elements. And best drop the $ in front of variables and create a
> >>>> new language. Everything else becomes a mess.
> >>>>
> >>>> johannes
> >>>>
> >>>>
> >>>>
> >>>> --
> >>>> PHP Internals - PHP Runtime Development Mailing List
> >>>> To unsubscribe, visit: http://www.php.net/unsub.php
> >>>>
> >>>>
> >>>>  I think he's actually proposing creating for each class the magic
> class
> >>> constant CLASS, so your example becomes:
> >>>
> >>>
> >>> <?php
> >>>
> >>> function factory($class) {
> >>>     return new $class();
> >>> }
> >>>
> >>> factory( SomeClass::CLASS );
> >>>
> >>> ?>
> >>>
> >>> This is actually doable without a magic class constant, but requires a
> >>> function or class constant to be declared in each class.
> >>>
> >>> <?php
> >>> class SomeClass {
> >>>     const CLASS = __NAMESPACE__ . '\' . __CLASS__;
> >>>     static function getNameWithNSPath()
> >>>     {
> >>>         return __NAMESPACE__ . '\' . __CLASS__;
> >>>     }
> >>> }
> >>>
> >>>
> >>> factory( SomeClass::getNameWithNSPath() );
> >>> ?>
> >>>
> >>> Perhaps this could be simplified with traits, if __NAMESPACE__ and
> >>> __CLASS__ work in traits that way. In fact, that's an interesting
> >>> question,
> >>> what is __NAMESPACE__ in a trait defined in one namespace, then used in
> a
> >>> class in a different namespace?
> >>>
> >>> I think the point is that the factory function could exist without any
> >>> knowledge of the namespaces of the classes it would work on. Then,
> >>> somewhere
> >>> else where the class has been aliased or is otherwise accessible
> without
> >>> the
> >>> full namespace path, the developer wouldn't need to specify the full
> >>> namespace path to the factory, but could ask the class itself what it's
> >>> full
> >>> namespace path was. I don't know that I agree with the idea, but I
> don't
> >>> think it requires making classes first class elements.
> >>>
> >>> John
> >>>
> >>>
> >>>
> >>
> > --
> > PHP Internals - PHP Runtime Development Mailing List
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
> >
> >
>
>
> --
> Mvh
> Martin Vium
> Senior System Arkitekt
> Sitevision
>

Reply via email to