Source: https://doc.lagout.org/programmation/tech_web/No.Starch.Press.Object.Oriented.PHP.Concepts.Techniques.and.Code.210pp.6-2006.pdf