Es una pregunta muy amplia, si bien los atributos si se pueden poner publicos no es lo mas recomendable menos en PHP ya que PHP es un lenguaje sin tipos especificos de datos, supongamos que tienes un objeto y idCliente es un atributo numerico, que pasa si a alguien se le ocurre poner un string, tendrias un error en tu transaccion de la base de datos, en cambio si checas que tipo de dato es puedes avisar a los programadores de este tipo de errores:
Código PHP:
class foo {
private $bar;
public function setBar( $bar ) {
if( !is_numeric( $bar ) ) {
throw new Exception( '$bar debe de ser un numero' );
}
$this->bar = $bar;
}
public function getBar() {
return $this->bar;
}
}
Esto es porque no siempre vas a trabajar tu con tus clases, es probable que entres a hacer un sistema donde trabajes con varios colaboradores y si alguien cambia algo de tus datos tendrias problemas en tu codigo.
Saludos.