I believe that in this matter, as in any other, no need to resort to extremes, i.e. how never use public fields, and use them everywhere — bad. In particular, it is unwise to use a class with 20 private fields, each of which has methods getX and setX.
For example, in C/C++ there are structures (struct), and the use of structures built a big part of any API. And nothing bad in it do not see. In PHP there are no structures, but their role can play classes with public fields.
Still, I think it makes sense to use public fields in that part of the system that is not visible to the outside, ie, where all the code is under your control. Sometimes it will make the code cleaner and more concise.
Still, for example, where the object is used for one time transmission unit of the information and subsequent field change will not affect the performance of the system (say, $object event with the fields name, type, sender, message). Etc.