I've been thinking quite a bit about getters. In the entities world they are quite limited, and most of the time they will be used only for returning virtual fields like constructing a full name out of a the first and last. So, given that we agreed that `null` still means the property is set, there will be no way to tell whether the property is actually set or not when calling the getter.

The problem would be solved by rolling back that decision: a property is set only if it has a not null value. That way we can call the getters and figure out if there is actually anything there. On the other side, that would mean that

`` new Entity(['id' => 1, 'name' => null]); $entity->has('name')`` will return false.

Regarding dirty state, that will only be calculated based on the status of the `_properties` array, it has nothing to do with whether a property is null or not.