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