Well, honestly, if you just need to cache temporary data for one run, you should use a global... just centralize the read/write code for these globals so that you can easily refactor it, and prefix your global names with your initials or company acronym... just like we do with eZ. There should be no conflicts this way (not more than with classes, at least :p).
If you want to implement more persistent caching, here are the options I would consider:
ezcCache. That's it :p
We plan on re-implementing most caches using the Cache component from the ezComponents. It has support for hierarchical cache, and already supports standard backends (memcache, APC, files...). http://ezcomponents.org/docs/tutorials/Cache