Buenas,
Yo empece programando en PHP y C, y ahora estoy estudiando PHP orientado a objetos. Lo que no entiendo de la POO es el encapsulamiento, osea no entiendo que gano poniendo a los atributos y/o metodos los modificadores public, private y protected.
No solamente te da las ventajas que te han dicho arriba, sino que ademas de eso, supon que tienes un atributo el cual es public, lo que quiere decir es que cualquier puede cambiar ese valor en cualquier momento, pero supon ademas que la logica de tu negocio dice que el valor de ese atributo nunca debe ser menor a 5 o mayor a 70, entonces tendras que validar por todas partes cosas inecesarias corriendo el riesgo de que alguien ignore estas validaciones y haga una asignación incorrecta, si encapsulas el atributo lo que seria la practica correcta, tus objetos de dicha clase no van a tener estos errores ya que puedes validarlo todo en el metodo set de dicho atributo, en codigo:
public class ProductoX{
private int valorCritico; // este valor no puede ser menor a 5 ni mayor a 70
private int[] algoCritico;
public set valorCritico (int value){
if (value < 0 || value > 70) throw ValorCriticoIncorrectoException;
this.valorCritico = value;
}
public int metodoCritico(){
return algoCritico[valorCritico];
}
}
En ese ejemplo si tu dejas valorCritico como publico nada impide a un usuario de la clase hacer lo siguiente
ProductoX x = new ProductoX();
x.valorCritico = -55;
int a = x.metodoCritico();
En este caso la aplicacion se cae por un error al tratar de leer el array con un valor de -55, y esto era simplemente evitable encapsulando el atributo y no dejando que lo modifiquen directamente sino mediante un metodo que construyes para tal fin.-