Properties, getters and setters

Properties are subtle yet powerful tools, in particular when trying to do AOP. Sometimes, it makes more sense to use a property rather than a field, or a function. The beauty of properties is that you can have behavior in your fields. Additionally, some libraries require you to use fields instead of functions, this helps you circumvent that kind of requirements.