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
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php