When writing a class for public consumption, is it best practice to expose the class methods you want available to the programmer via either using access control methods, ie public function foo() or to keep methods private and use programmer dispatched events to call the same methods. Both approaches work, but what is best practice, or is it simply a matter of personal style?