getInstance and new self()

php.internals

Jeffrey Moss

22 years ago
I found this on a zend engine 2 list archive, but didn't see an answer, has it been resolved? I am trying to create a singleton class heirarchy without having to override getInstance.... <?php class Test { public static function getInstance() { return new self(); } } class Foo extends Test { } var_dump(Foo::getInstance()); ?> thekid@friebes:~/devel/php/tests > php5 self.php object(test)#1 (0) { } Expected output would be "object(foo)", so I guess either "self" should not be evaluated at compile time or this should be disallowed. I'd prefer the first:) http://www.zend.com/lists/engine2/200307/msg00033.html

Andi Gutmans

22 years ago
self:: is always evaluated at compile-time and refers to the class it is defined in and not the concrete object/class. Andi At 05:03 PM 3/8/2004 -0700, Jeffrey Moss wrote:

Ferdinand Beyer

22 years ago
On 14 Mar 2004 at 19:31, Andi Gutmans wrote:
> self:: is always evaluated at compile-time and refers to the class it is > defined in and not the concrete object/class. > > Andi
I think it would be a better for self to refer to the concrete class. Otherwise it is not possible to access overridden static functions or to instantiate the concrete class.
-- Ferdinand Beyer <fb@fbeyer.com>