[aur-dev] [PATCH 1/2] refactor apc code and move to aur.inc
Lukas Fleischer
archlinux at cryptocrack.de
Wed Jun 1 13:05:06 EDT 2011
On Sun, May 29, 2011 at 01:59:45PM -0700, elij wrote:
> On Sun, May 29, 2011 at 7:27 AM, Lukas Fleischer
> <archlinux at cryptocrack.de> wrote:
> > On Sat, May 28, 2011 at 04:17:09PM -0700, elij wrote:
> >> + if(EXTENSION_LOADED_APC) {
> >> + $ret = apc_fetch(APC_PREFIX.$key, $status);
> >> + if ($status) {
> >> + return $ret;
> >> + }
> >> + }
> >> + return $status;
> >> +}
> >
> > I'd prefer to change get_cache_value()'s signature to return the status
> > indicator and pass the actual result by reference. That way, it could be
> > used as follows:
> >
> > ----
> > if (get_cache_value('foo', $foo)) {
> > do_something $foo
> > }
> > ----
> >
> > That just feels much more common and convenient. Any objections?
>
> That seems a bit unconventional, considering the existing codebase and
> common php practices. While it might make for the occasional nice
> conditional-if test, I think it is more of a leaky abstraction than
> the existing method.
>
> [...]
>
> Memcache::get returns false on failure, which can be problematic if a
> falsey value was stored in memcache, and you were trying to get it out
> (and test that retrieval succeeded). Passing a bool by reference fixes
> that case.
>
> You _can_ use a convention like this:
>
> if(!($foo = get_cache_value('bar'))) {
> // do stuff
> }
>
> As get_cache_value on failure *also* returns a falsey value, but this
> runs into the memcache api problem of what happens if you want to
> retrieve a falsey value. If you know that either you never store a
> falsey value for that key, or if your conditional test is appropriate
> assuming a falsey value stored (eg. if the condition is false due to
> failure or retrieval of a falseyness, the expected behavior is the
> same), then that convention works fine.
Yes, I was aware of that.
> Passing a data container by reference (your suggestion) would also
> work fine, but I don't see that very often in practice. I am probably
> not very current on php conventions though, and I am using the php
> documentation as a reference for 'best practices for api signatures'.
> Which may be a fools errand to some extent. ;)
>
> Do you make use of the 'pass data container by reference' convention
> regularly, or see it commonly used?
Well, I can't think of some good examples right now but it feels more
common and convenient to me. preg_match() and "&$matches" is kinda
similar but different, still.
It actually doesn't make all the difference here, so let's just keep its
signature for now. It can still be changed in a future patch.
Thanks!
More information about the aur-dev
mailing list