I\'d like to promote loose coupling in my PHP code, by making certain classes observable. Symfony\'s EventDispatcher component looks promising, as does the SPL
I would avoid (2). Inheritance is possibly the most over-used pattern and probably isn't relevant here. The choice between options (1) and (3) probably depends on your context. Whilst avoiding tight coupling is good, you should be wary of swiss-army knife solutions. Having an eventDispatcher that's everywhere in your app and does almost everything can make your code harder to test/understand/maintain etc (it can approach a God object). On the other hand, the Spl solution is much simpler and hence if you do need multiple observers/observables you might find you are having to maintain too many SplObservers/SplSubjects.
As with most things in OOP, there is no best way, and will normally depend on your exact use cases...