I need to be able to tell the difference between a read/write error, and an error produced because the developer tried to do something wrong.
An example would be apc_add().
I want to be able to tell the difference from when APC actually had a problem writing to the cache (like no memory left), and when the developer tried to re-use an existing cache key.
Neither one of the errors you’re describing exists — if the cache is “full”, APC will automatically evict an old entry, and if the cache key has already been set, APC will overwrite the original entry.