Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:29803 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 45275 invoked by uid 1010); 26 May 2007 12:10:55 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 45260 invoked from network); 26 May 2007 12:10:55 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 26 May 2007 12:10:55 -0000 Authentication-Results: pb1.pair.com header.from=bart@mediawave.nl; sender-id=unknown Authentication-Results: pb1.pair.com smtp.mail=bart@mediawave.nl; spf=permerror; sender-id=unknown Received-SPF: error (pb1.pair.com: domain mediawave.nl from 194.109.24.35 cause and error) X-PHP-List-Original-Sender: bart@mediawave.nl X-Host-Fingerprint: 194.109.24.35 smtp-vbr15.xs4all.nl FreeBSD 4.6-4.9 Received: from [194.109.24.35] ([194.109.24.35:4636] helo=smtp-vbr15.xs4all.nl) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 7A/51-31507-DC328564 for ; Sat, 26 May 2007 08:10:54 -0400 Received: from [192.168.0.195] (mediawave.xs4all.nl [194.109.253.196]) (authenticated bits=0) by smtp-vbr15.xs4all.nl (8.13.8/8.13.8) with ESMTP id l4QCAmYx071515; Sat, 26 May 2007 14:10:49 +0200 (CEST) (envelope-from bart@mediawave.nl) Message-ID: <465823E0.50800@mediawave.nl> Date: Sat, 26 May 2007 14:11:12 +0200 User-Agent: Thunderbird 2.0.0.0 (Windows/20070326) MIME-Version: 1.0 To: Marco Kaiser CC: internals@lists.php.net References: <2C.70.31507.8DE18564@pb1.pair.com> <465820AB.7030102@gmail.com> In-Reply-To: <465820AB.7030102@gmail.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: by XS4ALL Virus Scanner Subject: Re: [PHP-DEV] $var::$static (and $className::$staticVar) From: bart@mediawave.nl (Bart de Boer) I understand... My suggestion would be to map $this to the class name (of the current instance) if the Scope Resolution Operator '::' is used... Marco Kaiser wrote: > Hi, > > this doesnt work because static vars are bound to his class and are not > inherited by a child class. > maybe this would be work with php6 or a other 5.x version. > (Same behavior like the singleton pattern getInstance() abstract class > stuff) > > -- Marco > >> Hi all, >> >> I'd like to be able to do the following: >> >> >> > >> class Base { >> >> public static $var = 'hello'; >> >> public function someFunc() { >> echo self::$var; // Currently maps to Base::$var >> echo $this::$var; // Should map to Child::$var >> } >> >> } >> >> class Child extends Base { >> >> public static $var = 'hello'; >> >> } >> >> $class = 'Child'; >> >> $obj = new $class(); // This works. >> >> echo $class::$var; // This doesn't. Should map to Child::$var >> >> >> ?> >> >> >> ...in other words: I'd like to be able to access static class >> variables from inside an instance of the Base and/or Child classes. >> I'd also like to be able to access them dynamically. >> ($className::$variable) >> >> The only way to do this at the moment (to my knowledge at least) is to >> create functions in the Child class that returns its static variables. >> The downside of this is that those functions most likely will be very >> common (in my case they are) and should therefore belong in the base >> class. Hence: $this::$variable >> >> At the moment there is no way to access static variables from outside >> of the class dynamically. As a workaround for this I'm currently >> creating a temporary instance (new $type()) to access them dynamically >> with a __get() function in all the derived child classes. >> >> There are ways to do it with class constants and the constant >> functions. But it's not very elegant and class constants can't hold >> arrays and/or objects. >> >> I have no idea what the implications would be. Just thought it would >> be a nice addition to the language. :) Hope I didn't overlook some >> existing PHP feature that already allows me to do this. :| >> >> >> Cheers, >> >> Bart de Boer >> >>