Cómo funciona la especificación de control de acceso a métodos y atributos en PHP5
 Cuando se crea una nueva clase en PHP se puede especificar el nivel de acceso que tendrá cada método o atributo. En PHP5 existen tres modificadores de acceso:
Los elementos declarados como Public son accesibles tanto desde fuera como desde dentro de la clase.
<?php   class Vehiculo{    public  $marca;
    function  __construct($marca) {      $this->marca=$marca;    }   }
   $micoche = new  Vehiculo("Toyota");
   echo $micoche->marca;
?>El atributo marca es público y por lo tanto es visible desde fuera de la clase.
Los elementos declarados como Private son accesibles sólo desde la misma clase donde fueron definidos.
<?php
   class  Vehiculo {
    private  $marca;
    function  __construct($marca) {      $this->marca=$marca;    }
   }
   $micoche =  new Vehiculo("Toyota");
   echo  $micoche->marca;
  ?>Si ejecutamos el código obtendremos el siguiente error:
Fatal error: Cannot access private property Vehiculo::$marca
El atributo marca no es visible fuera de la clase en la que se definió.
Los elementos declarados como Protected son accesibles desde la misma clase donde fueron definidos y en sus subclases.
<?php
   class Vehiculo
   {
   protected $marca;
   function __construct($marca)
   {
   $this->marca=$marca;
   }
   }
   class Coche extends Vehiculo
   {
   function __construct($marca)
   {
   $this->marca=$marca;
   }
   }
   $micoche = new  coche("Toyota");
   echo $micoche->marca;
  ?>Si ejecutamos el código obtendremos el siguiente error
Fatal error: Cannot access protected property Coche
Producido por la línea que contiene este código:
echo $micoche->marca;
Este error sucede por utilizar el atributo marca fuera de la clase Vehículo y quedar así fuera de su visibilidad. En cambio el uso de este atributo en la clase Coche y Vehículo es correcto.
Los métodos o atributos sin ninguna de las declaraciones (public, private o protected) por defecto serán public.