Variables

Ya hemos visto que el nombre de una variable en PHP siempre empezará por el símbolo $, pero,¿Qué más reglas debemos recordar sobre los **identificadores** (nombres de variable o función) en PHP?

  • Pueden tener cualquier longitud, e incluir números y guiones bajos.
  • Nunca podrán comenzar por un número.
  • PHP distingue entre mayúsculas y minúsculas. Esto quiere decir que para PHP dos variables como unavariable y unaVariable se consideran variables distintas. Sin embargo, esto no es así en el caso de nombres de función y de clase.
  • Una variable podrá tener el mismo nombre que una función.

En PHP no se requiere declarar variables como en otros lenguajes de programación. Una variable se creará simplemente la primera vez que le asignemos un valor, mediante el operador de asignación. En el siguiente ejemplo creamos dos variables diferentes (la segunda a partir del valor de la primera):

$nproductos = 0;
$total = $nproductos;

Esta característica de PHP es una causa habitual de error. Si tecleamos incorrectamente el nombre de una variable no se nos avisará del fallo; sencillamente se definirá una nueva variable y seguramente el script no funcionará de la manera deseada.

PHP es un lenguaje **débilmente tipado**. Si se observa el ejemplo anterior, se verá que a la hora de crear las dos variables no se indicó en ningún momento el tipo de datos que éstas iban a contener. Esto es así porque el tipo de datos de una variable siempre vendrá determinado por el valor que tenga asignado en ese momento. De hecho, durante la ejecución del script es perfectamente posible modificar el tipo de una variable, asignando, por ejemplo, una variable que antes era de tipo entero una cadena de texto. Veamos esta característica con un ejemplo. Una vez que se ejecuten las siguientes instrucciones:

$nproductos = 0;
$total = 0.00;
$mensaje = 'Hola mundo';

PHP habrá asignado a la variable _nproductos_ el tipo entero, a la variable _total_ el tipo flotante y a la variable _mensaje_ el tipo cadena. Si más tarde durante la ejecución del script nos encontráramos la siguiente instrucción:

$nproductos = 12.0;

La variable _nproductos_ pasaría de ser una variable de tipo entero a tipo flotante.

Los tipos de datos admitidos en el lenguaje PHP son los siguientes:

Tipos básicos:

  • Entero: números enteros.
  • Flotante (o doble): números reales.
  • Cadena: cadenas de caracteres.
  • Booleano: un valor de verdad que puede ser true o false.

Tipos avanzados:

  • Array: un conjunto de datos almacenados bajo una misma estructura.
  • Objeto: entidades formadas por datos y métodos.

Tipos especiales:

  • NULL: para variables que no tienen valor o no han sido definidas todavía.
  • De recurso: correspondiente a los valores devueltos por algunas funciones que trabajan con recursos externos (por ejemplo, funciones para conexión a una base de datos).
  • Pseudo-tipos: usados en la especificación de funciones.
  • Mixed: indica que un determinado parámetro puede aceptar datos de diferentes tipos (no necesariamente de todos).
  • Number: indica que un determinado parámetro puede ser tanto un entero como un flotante.

Una peculiaridad de PHP es la posibilidad de disponer de variables de tipo variable. Por ejemplo, en el siguiente código:

$varname = 'barras';
$$varname = 5; // Equivale a $barras = 5

La variable _$$varname_ hará referencia a aquella variable cuyo nombre esté almacenado a su vez en la variable _$varname_. Es por ello que en el ejemplo anterior, al almacenar la variable _$varname_ el valor _barras_, la sentencia _$$varname = 5_ estará en realidad asignando el valor 5 a la variable _$barras_.

También, y al igual que en otros lenguajes, es posible realizar una conversión de tipos, es decir, pedirle a PHP que interprete el dato almacenado en una variable como si fuera un dato de diferente tipo. La sintaxis es igual a la de C. Simplemente antepondremos al nombre de la variable el nombre del tipo al que queremos hacer la conversión, entre paréntesis:

$nproductos = 0; // tipo entero
// Convertimos a doble
$total = (double)$nproductos;

results matching ""

    No results matching ""