Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:30071 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 32311 invoked by uid 1010); 5 Jun 2007 15:17:48 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 32296 invoked from network); 5 Jun 2007 15:17:48 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 5 Jun 2007 15:17:48 -0000 Authentication-Results: pb1.pair.com smtp.mail=jochem@iamjochem.com; spf=permerror; sender-id=unknown Authentication-Results: pb1.pair.com header.from=jochem@iamjochem.com; sender-id=unknown Received-SPF: error (pb1.pair.com: domain iamjochem.com from 194.109.193.121 cause and error) X-PHP-List-Original-Sender: jochem@iamjochem.com X-Host-Fingerprint: 194.109.193.121 mx1.moulin.nl Linux 2.6 Received: from [194.109.193.121] ([194.109.193.121:38335] helo=mx1.moulin.nl) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 47/89-11953-B9E75664 for ; Tue, 05 Jun 2007 11:17:48 -0400 Received: from localhost (localhost [127.0.0.1]) by mx1.moulin.nl (Postfix) with ESMTP id 78BD82538D0; Tue, 5 Jun 2007 17:17:50 +0200 (CEST) X-Virus-Scanned: amavisd-new at moulin.nl Received: from mx1.moulin.nl ([127.0.0.1]) by localhost (mx1.moulin.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id pmS0WtELe+nX; Tue, 5 Jun 2007 17:17:45 +0200 (CEST) Received: from [192.168.1.23] (bspr.xs4all.nl [194.109.161.228]) by mx1.moulin.nl (Postfix) with ESMTP id DB8992538BF; Tue, 5 Jun 2007 17:17:45 +0200 (CEST) Message-ID: <46657E94.1030900@iamjochem.com> Date: Tue, 05 Jun 2007 17:17:40 +0200 User-Agent: Thunderbird 1.5.0.12 (Windows/20070509) MIME-Version: 1.0 To: Bart de Boer CC: internals@lists.php.net, Ken Stanley References: <56275.216.230.84.67.1180484964.squirrel@www.l-i-e.com> <465D9040.6030001@iamjochem.com> <43689.216.230.84.67.1180643866.squirrel@www.l-i-e.com> <465FC76B.6030208@mediawave.nl> <4660A44F.6060802@mediawave.nl> In-Reply-To: <4660A44F.6060802@mediawave.nl> X-Enigmail-Version: 0.94.2.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [PHP-DEV] late static binding (please break BC?) From: jochem@iamjochem.com (Jochem Maas) Bart de Boer wrote: > Ken Stanley wrote: > ... > That's not right. Accessing the child class would only be possible from > within an instantiated object. Unlike parent::, you will never be able > to use static:: in a purely static context. Imagine there are multiple > child classes which all inherit from the same base class. If there's no > instance, PHP won't be able to know which child class to target with > child::, static:: or whateverkeyword:: since it can be any one of those > child classes. huh??? the 'child' class would refer to the class that was actually named when then call to the method was made (thats what late static binding means, does it not?): class Data { static function getTableName() { throw new Exception('WTF'); } static function findRange() { $t = child::getTableName(); } } class Prod { static function getTableName() { return 'PRODS'; } } Data::findRange(); // child = Data class Prod::findRange(); // child = Prod class if you require a class instance in order to use 'child' then the whole point is moot - because you can already do $child = get_class($this); inside the relevant function (assuming the function is not declared static, and why would you declare it as such if your requiring an instance to use 'child'?). maybe 'child' should be called 'callee' or even 'lsb' (that would make people hit the docs for sure :-)). alternatively maybe 'this' could be used as the LSB keyword: this::foo(); the samentics for determining what class is referred to with 'this::' is akin to that used for determining what class is referred with '$this->', no? MAYBE php6 should do late static binding for 'self', akin to other OO oriented scripting langs .. and just live with BC. I seriously wonder whether much code would break ... given that 'self' is not currently late binding how often would people have actually overwritten static methods ion child classes that are being called via the 'self' syntax in [parent] classes?