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 >