Q: How do controllers share objects ? A: A registry class stores it in an array. Our registry class is interresting because it practices lazy initialization. This example will get present the registry with lazy initialization and the global coding style. You are invited at a party hosted by James : beer; // Now $james has got you good beer [insert evil laugh here] ?> How come we are sure that james did his job at this point ? If James had the beer tonnel in his hands : he served you a fresh glass. An uncommon situation James hadn't the beer tonnel in his hands ! He called for his method : getBeer() (James is Object Oriented). getBeer() made him go in the fridge and come back with the current beer tonnel : and served you a fresh glass. A more common situation : we drink a lot of beerIn that case, James's programmer tweaked his getBeer() method, to not only make sure that he had a beer tonnel in his hands, but to check if it's not empty as well : in order to go get a new full beer tonnel if required. Another rare situation : we drink a lot of beer and don't have enought. (omg ?)If James would not be used to drink drink beer, getBeer() would make him to go and buy some : this is a very rare case and shouldn't even happen indeed and that's why we throw an exception. This shouldn't happen because James's wife got a cron job to buy a couple of additional tonnels in addition to the current one (she runs Linux, but does plenty of things a server doesn't). In that case, James throws a particular exception : ExceptionJamesGotNoBeerLeftOmg?. The exception is cough and he tells his guest : Sorry, an internal error occurred. We'll talk about exception handling deeper later.