Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:10744 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 1920 invoked by uid 1010); 24 Jun 2004 07:47:57 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 1884 invoked by uid 1007); 24 Jun 2004 07:47:57 -0000 Message-ID: <20040624074757.1883.qmail@pb1.pair.com> To: internals@lists.php.net Date: Thu, 24 Jun 2004 09:48:17 +0200 User-Agent: Mozilla Thunderbird 0.6 (Windows/20040502) X-Accept-Language: en-us, en MIME-Version: 1.0 References: <40DA29C3.1090301@velum.net> In-Reply-To: <40DA29C3.1090301@velum.net> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Posted-By: 80.126.99.118 Subject: Re: static/object method From: taco@procurios.nl (Taco van den Broek) Hans Lellelid wrote: > Hi all, > > I have a pattern I'm trying to implement in PHP5 using a class that > could be called statically or non-statically. Perhaps "pattern" gives > this too much legitimacy :) I can't figure out how to do this & wanted > to ask if a) it's possible at all and b) if there's been any solution > discussed for such an approach. > > Here's what I'm trying to do, but can't figure out a way in PHP5 (or a > non-hack way in PHP4): > > - AuthorFinder is a class that can be used statically for default > behavior or instantiated if customized behavior is needed. > > static, default behavior, probably accounts for 80% of uses: > > $c = new Criteria(Author::NAME, "Leo"); > $a = AuthorFinder::find($c); You pass your criteria to your search class as instantiated objects, why don't you pass your parameters/config flags as another type of object? Maybe like this: $c = new Criteria(Author::NAME, "Leo"); $f = new ConfigFlag(AuthorFinder::LIMIT, '5'); $a = AuthorFinder::find($c, $f); You could then check the $f object for any customizations, just like you check the $c object for where to search. > > instantiated behavior for performing customizations: > > $c = new Criteria(Author::NAME, "Leo"); > $af = new AuthorFinder(); > $af->setLimit(5); > $a = $af->find($c); > > Is there *any* way to accomplish that in PHP5? I can't reference $this > -- even to check isset() (which would probably be misleading anyway) > from inside a method declared as static. If I do not declare the method > static then calling it statically triggers E_STRICT error which I want > to avoid since I'm writing PHP5 code. Perhaps I'm missing an obvious > solution, in which case I apologize & probably should have asked > php-general. > > It would be *really* cool if PHP could support this type of pattern, as > there have been a few cases where I've wanted to apply this in PHP5. > Perhaps this has already been discussed & I just didn't notice. > > Thanks, > Hans