Public, Private y Protected

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:

Public

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.

Private

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ó.

Protected

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.