En PHP 4, no habia restricción en cuanto al acceso de los
miembros (variables y métodos) de un objeto.
En PHP 5, el acceso a propiedades
se puede definir explicitamente usando las palabras clave:
private, public, y protected cuando se declaran variables
y métodos.
<?php
class Animal {
private $id; // accesible solo por una instancia
protected $tipo; // accesible por instancias y subclases
public $nombre; // accesible en cualquier contexto
function __construct($id, $tipo) {
$this->asignarID($id);
$this->asignarTipo($tipo);
}
public function asignarID($id) {
if ($this->verificarID($id)) {
$this->id = $id;
}
}
protected function asignarTipo($tipo) {
$this->tipo = $tipo;
}
private function verificarID($id) {
return is_numeric($id);
}
}
class Iguana extends Animal {
function __construct($nombre) {
$this->asignarTipo('reptil');
$this->nombre = $nombre;
}
}
$loro = new Animal(1, 'ave');
$loro->nombre = 'silencioso'; // no hay problema
$loro->verificarID(); // genera un error, metodo privado
$verde = new Iguana('verde');
echo $verde->tipo; // genera un error, propiedad protegida
?>
el ejecutar el código, produce:
Fatal error: Call to private method Animal::verificarID() from context '' noob.php on line 34