NaiveHasTrait - Reduce roundtrips in `has()`
authorTim Otten <totten@civicrm.org>
Wed, 23 Jan 2019 20:52:58 +0000 (12:52 -0800)
committerTim Otten <totten@civicrm.org>
Wed, 23 Jan 2019 21:03:15 +0000 (13:03 -0800)
commit8f7f4610cba02fe896a801edc11b7c0e39e4c948
treec3e9b89f4072e92f11a5caa93294bc6f6dab7a11
parente0ba77f32f2575c7ad3c5221ad95b378e5a5a136
NaiveHasTrait - Reduce roundtrips in `has()`

The `NaiveHasTrait` is a generic implementation of PSR-16 `has()` which
builds on the logic of PSR-16 `get()`.  This reduces I/O for `has()`.

Before
------
* Each call to `has()` triggers two calls to `get()`.

After
-----
* Each call to `has()` triggers one call to `get()`.

Comments
--------

The correctness of this stems from the uniqueness of the `$nack` value.  To
wit: if you always use the same constant (e.g.  `NULL` or `0` or `''` or
`'no-value'`) to signify a cache-miss, then it's trivial to produce a
collision/incorrect-result.  (Simply store that constant.) But if the value
is a sufficiently unique nonce, then it becomes impractical to produce a
collision/incorrect-result.
CRM/Utils/Cache/NaiveHasTrait.php