Wouldn't be great if Phalcon overrides the setter and getter using magic methods so ANY property, no matter the visibility, uses the defined set or get only if exists. Same behaviour than it uses now when saving, etc...
So, in short, the model uses explicit set or get if they are defined, if not it just fallback to set the property or getting it as if where public.
I like this way since I don't need to care for the entity/model logic I just set or get the properties and the model takes care of the stuff.
For example, actually I'm have a Collection object from the ODM. When I set a date to a property I use a settert to convert it to MongoDate, and a getter to return a DateTime. The setter is used on assignement but the getter is not. It's the same when converting ->toArray(); the property is retrieved without using the getter and I end up with a MongoDate. I don't want to manage it outside of the model and I would like to call the properties by its name, not using the set or get always.