Professional Documents
Culture Documents
Propiedades y mtodos
Como hemos dicho, una clase es simplemente una coleccin de definiciones de variables
y funciones. Pero en programacin orientada a objetos, las variables definidas en una
clase se denominan propiedades, y las funciones definidas en la clase se denominan
mtodos. En el resto de este artculo se utilizarn preferentemente las denominaciones
propiedades y mtodos.
Objetos
Para utilizar una clase, creamos instancias de la clase, a las que llamamos objetos. Por
ejemplo:
<?php
$coche1 = new Coche;
$coche1->poner_en_marcha(80);
En este ejemplo hemos creado, con la palabra reservada new, dos objetos de la clase
Coche, $coche1 y $coche2. Como vemos, podemos asignar distintos valores a las
propiedades de cada uno de ellos.
Inicializacin de un objeto
Un objeto puede requerir algn tipo de inicializacin cuando es creado. Para ello,
aadimos a la definicin de la clase un mtodo con el nombre __construct(). Por ejemplo,
podemos crear dicho mtodo para inicializar la marca y modelo de un objeto de la clase
Coche:
function __construct($la_marca, $el_modelo) {
$this->marca = $la_marca;
$this->modelo = $el_modelo;
}
Como podemos ver en el ejemplo, aunque las propiedades se definen con el signo $ de
la forma $propiedad, cuando se utilizan se hace referencia a ellas con la sintaxis $this>propiedad, sin el signo $.
Destruccin de un objeto
Un objeto puede abrir ficheros, establecer conexiones a bases de datos, y en general
utilizar recursos que deben ser liberados cuando finaliza su existencia. Para ello, se puede
crear un mtodo __destruct() que contenga el cdigo necesario para realizar este trabajo.
El script puede llamar explicitamente al mtodo __destruct() de los objetos que ha creado
cuando deja de necesitarlos. Si no lo hace, estos mtodos son llamados automticamente
cuando finaliza la ejecucin del script.
Propiedades estticas
En la definicin de una propiedad podemos aadir la palabra reservada static. por
ejemplo:
class Coche
{
public static $velocidad_maxima = 160;
public $velocidad;
...
}
Una propiedad esttica puede ser accedida por el script utilizando la sintaxis
CLASE::PROPIEDAD, sin necesidad de crear una instancia. Por ejemplo:
print "La velocidad mxima de un coche es" . Coche::$velocidad_mxima . "n";
Por el contrario, si intentamos acceder a una propiedad no esttica con dicha sintaxis, se
produce un error fatal:
PHP Fatal error: Access to undeclared static property: Coche::$velocidad
in /home/usuario/pruebas_php/pru_objects.php on line 17
Por otra parte, el valor de una variable esttica puede ser cambiado, pero es nico y
compartido por todos los objetos de la clase. Si ejecutamos el siguiente cdigo:
class Coche
{
public static $velocidad_maxima = 80;
...
}
echo "La velocidad mxima de un coche es: " . Coche::$velocidad_maxima . "n";
$coche1 = new Coche();
echo "La velocidad mxima de coche1 es: " . $coche1::$velocidad_maxima . "n";
echo "nCambiamos el valor de la propiedad esttican";
Coche::$velocidad_maxima = 160;
echo "Ahora, la velocidad mxima de un coche es: " . Coche::$velocidad_maxima . "n";
$coche2 = new Coche();
echo "La velocidad mxima de coche1 es: " . $coche1::$velocidad_maxima . "n";
echo "La velocidad mxima de coche2 es: " . $coche2::$velocidad_maxima . "n";
Como vemos, incluso en el caso del objeto $coche1, que fu creado antes de cambiar el
valor de $velocidad_maxima, cuando se accede a dicha propiedad esttica se obtiene el
valor modificado.
Nota: Existe otro uso de la palabra reservada static que no tiene relacin con la
programacin orientada a objetos, cuando se utiliza en la definicin de variables en el
interior de una funcin (vase PHP: Variable scope Manual).
Propiedades constantes
Una propiedad constante contiene un valor asignado en su definicin, que no puede ser
modificado posteriormente.
Estas propiedades se definen utilizando la palabra reservada const. Por otra parte, no
utilizan el signo $ al comienzo del nombre.
class Coche
{
const descripcion = "Esta es la clase Coche";
...
}
Mtodos estticos
Tambin podemos utilizar la palabra reservada static a la hora de definir un mtodo. Esto
permite ejecutar el mtodo sin necesidad de crear un objeto, utilizando la sintaxis
Clase::mtodo().
Ejemplo:
class MiClase {
static function multiplica($dato1, $dato2) {
return $dato1 * $dato2;
}
}
echo "Resultado: " . MiClase::multiplica(3, 4) . "n";
function imprime_propiedades() {
echo $this->protegida . ", " . $this->privada;
echo "n";
}
La diferencia entre ambos tipos est en su comportamiento cuando se crea una clase
derivada de otra: Una propiedad protected es heredada y puede ser redefinida en la
clase derivada, pero si se intenta acceder a una propiedad private en la clase hija se
obtiene el valor undefined.