Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:62200 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 92313 invoked from network); 15 Aug 2012 19:52:25 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 15 Aug 2012 19:52:25 -0000 Authentication-Results: pb1.pair.com smtp.mail=lester@lsces.co.uk; spf=permerror; sender-id=unknown Authentication-Results: pb1.pair.com header.from=lester@lsces.co.uk; sender-id=unknown Received-SPF: error (pb1.pair.com: domain lsces.co.uk from 213.123.26.187 cause and error) X-PHP-List-Original-Sender: lester@lsces.co.uk X-Host-Fingerprint: 213.123.26.187 c2beaomr09.btconnect.com Received: from [213.123.26.187] ([213.123.26.187:10478] helo=mail.btconnect.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id B0/43-08779-7FDFB205 for ; Wed, 15 Aug 2012 15:52:24 -0400 Received: from host81-138-11-136.in-addr.btopenworld.com (EHLO _10.0.0.5_) ([81.138.11.136]) by c2beaomr09.btconnect.com with ESMTP id IQR61772; Wed, 15 Aug 2012 20:52:20 +0100 (BST) Message-ID: <502BFDEA.2090608@lsces.co.uk> Date: Wed, 15 Aug 2012 20:52:10 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120604 Firefox/13.0 SeaMonkey/2.10 MIME-Version: 1.0 To: PHP internals References: <502BC62D.8000405@lsces.co.uk> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Mirapoint-IP-Reputation: reputation=Fair-1, source=Queried, refid=tid=0001.0A0B0303.502BFDEC.007F, actions=tag X-Junkmail-Premium-Raw: score=7/50, refid=2.7.2:2012.8.15.191226:17:7.944, ip=81.138.11.136, rules=__MOZILLA_MSGID, __HAS_MSGID, __SANE_MSGID, __HAS_FROM, __USER_AGENT, __MIME_VERSION, __TO_MALFORMED_2, __BOUNCE_CHALLENGE_SUBJ, __BOUNCE_NDR_SUBJ_EXEMPT, __CT, __CT_TEXT_PLAIN, __CTE, __ANY_URI, __URI_NO_WWW, __CP_URI_IN_BODY, BODY_ENDS_IN_URL, BODY_SIZE_3000_3999, __MIME_TEXT_ONLY, RDNS_GENERIC_POOLED, HTML_00_01, HTML_00_10, BODY_SIZE_5000_LESS, RDNS_SUSP_GENERIC, RDNS_SUSP, BODY_SIZE_7000_LESS X-Junkmail-Status: score=10/50, host=c2beaomr09.btconnect.com X-Junkmail-Signature-Raw: score=unknown, refid=str=0001.0A0B0209.502BFDF4.0142:SCFSTAT14830815,ss=1,re=-4.000,fgs=0, ip=0.0.0.0, so=2011-07-25 19:15:43, dmn=2011-05-27 18:58:46, mode=multiengine X-Junkmail-IWF: false Subject: Re: [PHP-DEV] Proposal: use SomeClass::staticMethod From: lester@lsces.co.uk (Lester Caine) Giedrius Dubinskas wrote: > On Wed, Aug 15, 2012 at 6:54 PM, Lester Caine wrote: >> Giedrius Dubinskas wrote: >>> >>> My main aim with this suggestion is readability. I'd like to remove >>> unnecessary noise in code where it doesn't add any value to the >>> reader. Code is easy to type (especially with good autocompletion) but >>> it is read more often then typed and I think that is important. Or is >>> it just me? >> >> Depends who is doing the reading? Since a static method should be provided >> with all the data it needs to produce a result, does it actually matter what >> it is called and how it is called? Of cause it does when one is trying to >> find the right descendent method of the class? >> >> I've already been told that the code I'm working on upgrading is archaic but >> it works fine. The bulk of the recent work has been pulling $this out of >> functions and creating a static section for many that handles the results of >> building a hash from the object, or supplying a ready built one. I'm told >> that it's bad practice to include the static functions within the class? But >> they are an integral part of processing the object, or are overridden by >> functions in the descendant objects. So 'staticMethod' has to be the right >> one for the object created, and SomeClass:: depends on the object being >> created. So how does the proposal cope with that type of structure? > > Sorry, I'm not sure I follow. Would it be possible provide some > examples of what you mean? > > My proposal does not change anything to existing code. It only adds to > readability where it is most desired. I picked PHPUnit example just to > show that there is a desire for it in real world applications and in > that particular case looks like inheritance was used (IMHO > incorrectly) to reduce noise of prefixing class to each static method > call for assertion and mocking matcher. > > With my proposal it would be posible to reduce this noise even more. > > I am not saying that this feature would be used everywhere nor that it > should. But it would add a lot where it is already most desired. > > And FWIW for PHPUnit it would work out of the box. The static methods > are already there. One would just need to ``use`` them :-) Overriding just one version of 'staticMethod' with a shorthand is going to make working out WHICH version is being called all the more difficult to understand as one has to find a use clause to which it relates somewhere further up the code chain? Simply to identify the relevant block of code that is being actioned. In real applications (PHPUnit are not a real application only test case actions) there will be several occurrences of say 'getDisplayUrlFromHash' for the base class and for each specialised descendant class, so that referring to one via shorthand does not work practically. There may be special cases where it could be used, but that is just the sort of 'creep' that we need to avoid? At some point using the shorthand has to be replaced with the proper version simply because a different version of the code is needed. The main problem I have here is that having reworked the code to remove all the strict warnings/errors, I'm still not sure that the resulting code IS following the right rules, so it may well be that there is another way of building descendent static code that works more like you expect it to? -- Lester Caine - G8HFL ----------------------------- Contact - http://lsces.co.uk/wiki/?page=contact L.S.Caine Electronic Services - http://lsces.co.uk EnquirySolve - http://enquirysolve.com/ Model Engineers Digital Workshop - http://medw.co.uk Rainbow Digital Media - http://rainbowdigitalmedia.co.uk