No es que haya una guía específica para determinar cómo declarar cada propiedad o método, todo depende de lo que vas a hacer con cada una y tal vez una serie de preguntas pueda servir como punto de partida:
¿Necesitas que la propiedad sea de solo lectura?
Sí: private y hay que crear un método para establecer/devolver el valor actual (setter/getter)
No: public
¿Quieres que la propiedad se pueda modificar fuera de la clase?
Sí: public
No: private
¿Puede haber repercusiones si la propiedad se modifica fuera de la clase?
Sí, debería modificarse por un método para aplicar otras acciones: private
No, no hay otras propiedades o métodos que dependan de este valor: public
¿Hay riesgos en tener propiedades públicas pero te da flojera crear setters y getters?
Sí: public
No: private
¿Cuándo usar protected?
Cuando tengas clases que extienden otras y necesites acceder a propiedades y métodos desde la clase base y la extendida, evitando accesos desde fuera