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.