Tal y como vimos en el ejemplo donde creamos nuestra primera clase, la declaración de los atributos y los métodos van precedidos de una palabra, que pueden ser* public, private, y protected*.

Por lo general es recomendable guardar una sola clase por fichero, y que el fichero se llame igual que la clase, de esta forma tendremos organizados nuestros scripts de una manera fácil de recordar, en este caso guardaremos la clase Mario en mario.php. Veamos usando el ejemplo de Super Mario como hacer que nuestro personaje salte:

saltar(); ?>

Muy sencillo, no requiere de mucha explicación, incluimos la la clase Mario, creamos y almacenamos el objeto en la variable $mario e invocamos el método saltar escribiendo la variable ($mario) seguido de un “guion” y el símbolo “mayor que” (->) y por ultimo el nombre del método. Esto imprimiría en pantalla “Estoy Saltando!!“.

Hagamos un ligero cambio al script, esta vez vamos a invocar el método _die() en lugar de saltar().

_die(); ?>

¿Que ha pasado? Pues que hemos recibido un error parecido a “Fatal error: Call to private method Mario::_die() from context ””. Si revisamos la clase Mario podemos ver que el método* _die()* esta precedido por la palabra private, en el caso de saltar() la palabra que lo precede es public.

Ahora que has visto un ejemplo practico trataré de explicar las diferencias entre los diferentes niveles de visibilidad:

  • Public: El atributo o método precedido de public podrá ser leído o llamado en cualquier parte del código, sea desde la misma clase o desde fuera de ella, esto significa que también podrá ser alterado sin restricciones, por eso se aconseja que los atributos se declaren como privados salvo casos excepcionales.
  • Private: El atributo o método marcado como private solo puede ser leído o alterado desde el interior de la clase. Al intentar acceder desde fuera genera un error como el que hemos visto en el ejemplo anterior.
  • Protected: De momento no hemos dado la herencia pero como protected es un estado de visibilidad lo explicaré y más adelante veremos algún ejemplo practico. Los atributos o métodos protected son similares a los private, solo se puede acceder a ellos desde el interior de la clase, pero con una diferencia muy útil, las clases heredadas de está también podrán leer y alterar estos atributos.

Al declarar un atributo o un método podemos omitir su grado de visibilidad, así:

En el caso de omitir el grado de visibilidad se tomaran por defecto como public, hay que prestar especial atención a esto para evitar que un atributo o método que no debería ser publico genere un problema de seguridad.

Para poder acceder a los atributos o métodos desde el interior de la propia clase se utiliza $this. La forma es exactamente igual que cuando queríamos que Mario saltase con $mario->saltar(); solo que desde el interior sería $this->saltar();.

Si miramos detenidamente el método* recibirGolpe()* de Mario podemos ver que se acceden a los atributos y métodos privados de la clase mediante el uso de $this:

//Método para cuando nos golpean public function recibirGolpe(){ if($this->tam 1){ $this->flor = false; $this->tam = 0; }else{ $this->die(); } }

En este caso comprobamos si Mario es grande ($this._tam 1) para devolverle su tamaño natural, y en caso de ser pequeño invocamos el método privado _die(). Si _die() fuera un método publico sería un problema porque podríamos matar a nuestro personaje sin necesidad de comprobar su tamaño o incluso matarlo sin recibir ningún golpe.