Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:42756 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 28886 invoked from network); 21 Jan 2009 21:05:40 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 21 Jan 2009 21:05:40 -0000 Authentication-Results: pb1.pair.com smtp.mail=david@grudl.com; spf=permerror; sender-id=unknown Authentication-Results: pb1.pair.com header.from=david@grudl.com; sender-id=unknown Received-SPF: error (pb1.pair.com: domain grudl.com from 209.85.219.21 cause and error) X-PHP-List-Original-Sender: david@grudl.com X-Host-Fingerprint: 209.85.219.21 mail-ew0-f21.google.com Received: from [209.85.219.21] ([209.85.219.21:38564] helo=mail-ew0-f21.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 5A/BC-19181-22E87794 for ; Wed, 21 Jan 2009 16:05:40 -0500 Received: by ewy14 with SMTP id 14so2039866ewy.23 for ; Wed, 21 Jan 2009 13:05:35 -0800 (PST) Received: by 10.102.247.4 with SMTP id u4mr3712924muh.128.1232571935303; Wed, 21 Jan 2009 13:05:35 -0800 (PST) Received: from ?192.168.1.53? ([77.240.188.66]) by mx.google.com with ESMTPS id w5sm7119947mue.25.2009.01.21.13.05.33 (version=SSLv3 cipher=RC4-MD5); Wed, 21 Jan 2009 13:05:34 -0800 (PST) Message-ID: <49778E0A.5010806@grudl.com> Date: Wed, 21 Jan 2009 22:05:14 +0100 User-Agent: Thunderbird 2.0.0.19 (Windows/20081209) MIME-Version: 1.0 To: PHP internals Content-Type: text/plain; charset=ISO-8859-2; format=flowed Content-Transfer-Encoding: 7bit Subject: Enhanced __CLASS__ constant From: david@grudl.com (David Grudl) Especially in namespaced code it should be very useful to have "something" returning fully qualified name as string. It can be operator, but I think introducing new keyword is bad way, or it can be realized using well known magic constant in new context: Example: function factory($class) { return new $class; } $obj = factory('MyClass'); // returns object MyClass $obj = factory(MyClass::__CLASS__); // returns again object MyClass, code is little bit more selfexplaining But big advantages are in namespaced code (especially when you refactor a code): namespace Foo; use Other\Bar; $obj = factory('MyClass'); // ERROR - returns object \MyClass, must be refactored to: $obj = factory(__NAMESPACE__ . '\\MyClass'); // very very ugly! :-( $obj = factory('Other\Bar'); // use statement must be duplicated here :-( // with magic contant: $obj = factory(MyClass::__CLASS__); // returns object Foo\MyClass, very understandable :-) $obj = factory(Bar::__CLASS__); // returns object Other\Bar, as use statement declares :-) David Grudl