loading...
Cover image for Entities properties : public, protected or private ?

Entities properties : public, protected or private ?

juyn profile image Xavier Dubois πŸ‡«πŸ‡· ・1 min read

We all write a lot of models and entities, specially when we are working with frameworks like Symfony.

But, when you code them, you have to make a choice for the properties. Should they be public, protected or private ?

Symfony made a choice: private.
Laravel chose public.

My coworkers, inside our Symfony projects code them either protected or private, with a bunch of accessors.

I prefer the Laravel's way, and always code them with a public visibility.

I made that choice because most of the time (like 99% of the time), accessors are useless, they don't transform the data. I prefer access them with object->property instead of object->getProperty()

And you, what visibility is your default choice, and why ?

Discussion

markdown guide
 

An entity is a mutable object, so entity properties should be public, but if you want to guarantee that your entity must always have assigned particular property, make them private and require to pass via the constructor. See example,

Class Test
 private a

 Constructor(Π°){
  This->Π° = Π°;
 

Well, I do see the logic here, but if your concern is to guarantee that properties are set, using assertions and validators is easier and safer.
Constructors are good for tiny entities, but if they have more than 10 properties, good luck with that !

 

No problem, do you know about value object? You always wrap up and pass it.
Please spend time on reading this book. After that, your doubts dissipate.

 

I also like the Laravel way, it is even more fluid when accessing nested relationships.