Saltar la navegación

1.2.2.- Creación de clases (II).

Dibujo de un folio y encima una lupa, un destornillador y una llave inglesa.
David Vignoni (GNU/GPL)

Cuando desde un objeto se invoca un método de la clase, a éste se le pasa siempre una referencia al objeto que hizo la llamada. Esta referencia se almacena en la variable $this. Se utiliza, por ejemplo, en el código anterior para tener acceso a los atributos privados del objeto (que sólo son accesibles desde los métodos de la clase).

echo "<p>" . $this->codigo . "</p>";

Dentro de la clase para acceder a sus métodos o atributos propios usaremos  $this->nombre,(salvo que el atributo o el método sea estático) Fíjate que al atributo se le quita "$". Veamos un ejemplo:

class Persona{
    private $nombre;
    private $perfil;
    public function getNombre(){
        return $this->nombre;
    }
    public function setNombre($n){
        $this->nombre=$n;
    }
    public function saludo(){
        //Fijate como hacemos referencia al método getNombre
        echo "Hola {$this->getNombre()}, Buenos dias";
    }
}
$persona1=new Persona();
$persona1->setNombre("Luis");
$persona1->saludo();

Debes conocer

Una referencia es una forma de utilizar distintos nombres de variables para acceder al mismo contenido. En los puntos siguientes aprenderás a crearlas y a utilizarlas.

Referencia.

Además de métodos y propiedades, en una clase también se pueden definir constantes, utilizando la palabra const. Es importante que no confundas los atributos con las constantes. Son conceptos distintos: las constantes no pueden cambiar su valor (obviamente, de ahí su nombre), no usan el carácter $ y, además, su valor va siempre entre comillas y está asociado a la clase, es decir, no existe una copia del mismo en cada objeto. Por tanto, para acceder a las constantes de una clase, se debe utilizar el nombre de la clase y el operador ::, llamado operador de resolución de ámbito (que se utiliza para acceder a los elementos de una clase).

class DB {
    const USUARIO = 'gestor';
    …
}
echo DB::USUARIO;

Es importante resaltar que no es necesario que exista ningún objeto de una clase para poder acceder al valor de las constantes que defina. Además, sus nombres suelen escribirse en mayúsculas.

Tampoco se deben confundir las constantes con los miembros estáticos de una clase. En PHP, una clase puede tener atributos o métodos estáticos, también llamados a veces atributos o métodos de clase. Se definen utilizando la palabra clave static.

class Producto {
    private static $num_productos = 0; 
    public static function nuevoProducto() {
        self::$num_productos++;
    }
    …
}

Los atributos y métodos estáticos no pueden ser llamados desde un objeto de la clase utilizando el operador "->". Si el método o atributo es público, deberá accederse utilizando el nombre de la clase y el operador de resolución de ámbito.

Producto::nuevoProducto();

Si es privado, como el atributo $num_productos en el ejemplo anterior, sólo se podrá acceder a él desde los métodos de la propia clase, utilizando la palabra self. De la misma forma que $this hace referencia al objeto actual, self hace referencia a la clase actual.

self::$num_productos ++;

Los atributos estáticos de una clase se utilizan para guardar información general sobre la misma, como puede ser el número de objetos que se han instanciado. Sólo existe un valor del atributo, que se almacena a nivel de clase.

Los métodos estáticos suelen realizar alguna tarea específica o devolver un objeto concreto. Por ejemplo, las clases matemáticas suelen tener métodos estáticos para realizar logaritmos o raíces cuadradas. No tiene sentido crear un objeto si lo único que queremos es realizar una operación matemática.

Los métodos estáticos se llaman desde la clase. No es posible llamarlos desde un objeto y por tanto, no podemos usar $this dentro de un método estático.

Para saber más

El operador "::", tiene un nombre curioso en programación : Paamayim Nekudotayim, Significa "doble dos puntos" en Hebreo.