informaticaPC

Tutorial de PHP

Averiguar y convertir tipo de datos, constantes, pasar variables por valor o referencia

Averiguar tipo de dato de una variable

Si bien para obtener información sobre el tipo de dato que contiene una variable disponemos de la función gettype(), según la propia documentación oficial de PHP se recomienda usar en su lugar las siguientes funciones devuelven 'true' si...:

  • is_bool(): el valor es de tipo lógico (true o false). No funcionará si el valor es un número.
<?php
    $var1 = true;
    $var2 = false;
    $var3 = 1;

    // Se devuelve 'true'
    if( is_bool($var1) == true )
        echo "'var1' contiene un valor lógico<br/>";
    else
        echo "'var1' NO contiene un valor lógico<br/>";

    // Se devuelve 'true'
    if( is_bool($var2) == true )
        echo "'var2' contiene un valor lógico<br/>";
    else
        echo "'var2' NO contiene un valor lógico<br/>";

    // Se devuelve 'false' (la variable no contiene un valor lógico, ya que se ha asignado un número)
    if( is_bool($var3) == true )
        echo "'var3' contiene un valor lógico<br/>";
    else
        echo "'var3' NO contiene un valor lógico<br/>";

    echo "----------------<br/>";
    echo "Fin del ejemplo.";
?>

Descargar ejemplo

  • is_string(): el valor es de tipo cadena.
<?php
    $var1  = "Antonio";
    $var2  = true;
    $var3  = "true";
    $var4  = 33;
    $var5  = "33";
    $var6  = "33 44";
    $var7  = "33.44";
    $var8  = "33,44";
    $var9  = 33.44;

    // Se devuelve 'true'
    if( is_string($var1) == true )
        echo "'var1' contiene una cadena de texto<br/>";
    else
        echo "'var1' NO contiene una cadena de texto<br/>";

    // Se devuelve 'false' (la variable no tiene una cadena de texto)
    if( is_string($var2) == true )
        echo "'var2' contiene una cadena de texto<br/>";
    else
        echo "'var2' NO contiene una cadena de texto<br/>";

    // Se devuelve 'true'
    if( is_string($var3) == true )
        echo "'var3' contiene una cadena de texto<br/>";
    else
        echo "'var3' NO contiene una cadena de texto<br/>";

    // Se devuelve 'false' (la variable no tiene una cadena de texto)
    if( is_string($var4) == true )
        echo "'var4' contiene una cadena de texto<br/>";
    else
        echo "'var4' NO contiene una cadena de texto<br/>";

    // Se devuelve 'true'
    if( is_string($var5) == true )
        echo "'var5' contiene una cadena de texto<br/>";
    else
        echo "'var5' NO contiene una cadena de texto<br/>";

    // Se devuelve 'true'
    if( is_string($var6) == true )
        echo "'var6' contiene una cadena de texto<br/>";
    else
        echo "'var6' NO contiene una cadena de texto<br/>";

    // Se devuelve 'true'
    if( is_string($var7) == true )
        echo "'var7' contiene una cadena de texto<br/>";
    else
        echo "'var7' NO contiene una cadena de texto<br/>";

    // Se devuelve 'true'
    if( is_string($var8) == true )
        echo "'var8' contiene una cadena de texto<br/>";
    else
        echo "'var8' NO contiene una cadena de texto<br/>";

    // Se devuelve 'false' (la variable no tiene una cadena de texto)
    if( is_string($var9) == true )
        echo "'var9' contiene una cadena de texto<br/>";
    else
        echo "'var9' NO contiene una cadena de texto<br/>";

    echo "----------------<br/>";
    echo "Fin del ejemplo.";
?>

Descargar ejemplo

Tipo de dato string

  • is_int(): el valor es un número entero. Si el número entero está como cadena de texto (entre comillas) no se considera como un número.
<?php
    $var1  = 33;
    $var2  = "33";
    $var3  = "33 44";
    $var4  = "33.44";
    $var5  = "33,44";
    $var6  = 33.44;

    // Se devuelve 'true'
    if( is_int($var1) == true )
        echo "'var1' contiene un número entero<br/>";
    else
        echo "'var1' NO contiene un número entero<br/>";

    // Se devuelve 'false' (la variable no contiene un número entero)
    if( is_int($var2) == true )
        echo "'var2' contiene un número entero<br/>";
    else
        echo "'var2' NO contiene un número entero<br/>";

    // Se devuelve 'false' (la variable no contiene un número entero)
    if( is_int($var3) == true )
        echo "'var3' contiene un número entero<br/>";
    else
        echo "'var3' NO contiene un número entero<br/>";

    // Se devuelve 'false' (la variable no contiene un número entero)
    if( is_int($var4) == true )
        echo "'var4' contiene un número entero<br/>";
    else
        echo "'var4' NO contiene un número entero<br/>";

    // Se devuelve 'false' (la variable no contiene un número entero)
    if( is_int($var5) == true )
        echo "'var5' contiene un número entero<br/>";
    else
        echo "'var5' NO contiene un número entero<br/>";

    // Se devuelve 'false' (la variable no contiene un número entero)
    if( is_int($var6) == true )
        echo "'var6' contiene un número entero<br/>";
    else
        echo "'var6' NO contiene un número entero<br/>";

    echo "----------------<br/>";
    echo "Fin del ejemplo.";
?>

Descargar ejemplo

Tipo de dato entero

  • is_float(): el valor es un número con decimales.
<?php
    $var1  = "33.44";
    $var2  = "33,44";
    $var3  = 33.44;

    // Se devuelve 'false' (la variable no contiene un número decimal)
    if( is_float($var1) == true )
        echo "'var1' contiene un número decimal<br/>";
    else
        echo "'var1' NO contiene un número decimal<br/>";

    // Se devuelve 'false' (la variable no contiene un número decimal)
    if( is_float($var2) == true )
        echo "'var2' contiene un número decimal<br/>";
    else
        echo "'var2' NO contiene un número decimal<br/>";

    // Se devuelve 'verdadero'
    if( is_float($var3) == true )
        echo "'var3' contiene un número decimal<br/>";
    else
        echo "'var3' NO contiene un número decimal<br/>";

    echo "----------------<br/>";
    echo "Fin del ejemplo.";
?>

Descargar ejemplo

Tipo de dato float

  • is_numeric(): el valor es un número o una cadena numérica.

    Al contrario de lo que sucede con is_int() e is_float(), si el número se encuentra como cadena de texto (entre comillas) sí se considera como tal: por ello es recomendable usar is_numeric() para por ejemplo validar un formulario (ya que los datos del mismo llegan a PHP como cadena de texto).

<?php
    $var1  = 33;
    $var2  = "33";
    $var3  = "33 44";
    $var4  = "33.44";
    $var5  = "33,44";
    $var6  = 33.44;

    // Se devuelve 'true'
    if( is_numeric($var1) == true )
        echo "'var1' contiene un número o cadena numérica<br/>";
    else
        echo "'var1' NO contiene un número o cadena numérica<br/>";

    // Se devuelve 'true'
    if( is_numeric($var2) == true )
        echo "'var2' contiene un número o cadena numérica<br/>";
    else
        echo "'var2' NO contiene un número o cadena numérica<br/>";

    // Se devuelve 'false' (la variable no contiene un número o cadena numérica)
    if( is_numeric($var3) == true )
        echo "'var3' contiene un número o cadena numérica<br/>";
    else
        echo "'var3' NO contiene un número o cadena numérica<br/>";

    // Se devuelve 'true'
    if( is_numeric($var4) == true )
        echo "'var4' contiene un número o cadena numérica<br/>";
    else
        echo "'var4' NO contiene un número o cadena numérica<br/>";

    // Se devuelve 'false' (la variable no contiene un número o cadena numérica)
    if( is_numeric($var5) == true )
        echo "'var5' contiene un número o cadena numérica<br/>";
    else
        echo "'var5' NO contiene un número o cadena numérica<br/>";

    // Se devuelve 'true'
    if( is_numeric($var6) == true )
        echo "'var6' contiene un número o cadena numérica<br/>";
    else
        echo "'var6' NO contiene un número o cadena numérica<br/>";

    echo "----------------<br/>";
    echo "Fin del ejemplo.";
?>

Descargar ejemplo

Tipo de dato numeric

  • is_null(): el valor es nulo.
<?php
    $var1;
    $var2 = null;
    $var3 = "null";

    // Se devuelve 'true'
    if( is_null($var1) == true )
        echo "'var1' contiene un valor nulo<br/>";
    else
        echo "'var1' NO contiene un valor nulo<br/>";

    // Se devuelve 'true'
    if( is_null($var2) == true )
        echo "'var2' contiene un valor nulo<br/>";
    else
        echo "'var2' NO contiene un valor nulo<br/>";

    // Se devuelve 'false' (la variable no tiene un valor nulo)
    if( is_null($var3) == true )
        echo "'var3' contiene un valor nulo<br/>";
    else
        echo "'var3' NO contiene un valor nulo<br/>";

    echo "----------------<br/>";
    echo "Fin del ejemplo.";
?>

Descargar ejemplo

Tipo de dato nulo

Otra función de PHP que nos resultará útil es empty(), que devolverá true si la variable está vacía, siendo expresiones consideradas como vacías:

  • "" (una cadena vacía)
  • 0 (0 como un entero)
  • 0.0 (0 como un real)
  • "0" (0 como una cadena)
  • NULL
  • FALSE
  • array() (un array vacío)
  • var $var; (una variable declarada, pero sin un valor en una clase)
<?php
    $var1;
    $var2 = null;
    $var3 = "null";
    $var4 = "";
    $var5 = 0;
    $var6 = "0";
    $var7 = true;
    $var8 = false;

    // Se devuelve 'true'
    if( empty($var1) == true )
        echo "'var1' contiene un valor vacío<br/>";
    else
        echo "'var1' NO contiene un valor vacío<br/>";

    // Se devuelve 'true'
    if( empty($var2) == true )
        echo "'var2' contiene un valor vacío<br/>";
    else
        echo "'var2' NO contiene un valor vacío<br/>";

    // Se devuelve 'false' (no está vacío)
    if( empty($var3) == true )
        echo "'var3' contiene un valor vacío<br/>";
    else
        echo "'var3' NO contiene un valor vacío<br/>";

    // Se devuelve 'true'
    if( empty($var4) == true )
        echo "'var4' contiene un valor vacío<br/>";
    else
        echo "'var4' NO contiene un valor vacío<br/>";

    // Se devuelve 'true'
    if( empty($var5) == true )
        echo "'var5' contiene un valor vacío<br/>";
    else
        echo "'var5' NO contiene un valor vacío<br/>";

    // Se devuelve 'true'
    if( empty($var6) == true )
        echo "'var6' contiene un valor vacío<br/>";
    else
        echo "'var6' NO contiene un valor vacío<br/>";

    // Se devuelve 'false' (no está vacío)
    if( empty($var7) == true )
        echo "'var7' contiene un valor vacío<br/>";
    else
        echo "'var7' NO contiene un valor vacío<br/>";

    // Se devuelve 'true'
    if( empty($var8) == true )
        echo "'var8' contiene un valor vacío<br/>";
    else
        echo "'var8' NO contiene un valor vacío<br/>";

    echo "----------------<br/>";
    echo "Fin del ejemplo.";
?>

Descargar ejemplo

Tipo de dato vacío

Otras funciones de PHP que devuelven información sobre los tipos de datos básicos son:

  • is_array(): la variable es un array.
  • is_resource(): la variable contiene una referencia a un recurso (un archivo abierto, conexión con una bases de datos, etc.).
  • is_object(): la variable es un Objeto.
  • method_exists(): un Objeto contiene un método con el nombre especificado.

Más adelante aprenderemos a usar arrays, recursos y objetos.

Más información

Vea también: [ is_bool() ] - [ is_string() ] - [ is_int() ] - [ is_float() ] - [ is_numeric() ] - [ is_null() ] - [ empty() ]

Convertir el tipo de dato de una variable

Como hemos visto anteriormente, en lenguaje PHP no es necesario indicar el tipo de dato al crear una variable, pudiendo en cualquier momento almacenar en ella un valor de otro tipo de dato diferente.

Si necesitamos cambiar el tipo de dato de una variable podemos usar la función de PHP settype() indicando como segundo parámetro el tipo de dato al que deseamos convertir (devuelve true si la conversión se ha realizado correctamente, o false en caso contrario):

  • boolean (o desde PHP 4.2.0, bool)
  • integer (o desde PHP 4.2.0, int)
  • float (únicamente posible desde PHP 4.2.0, para versiones anteriores utiliza la variante obsoleta double)
  • string
  • array
  • object
  • null (desde PHP 4.2.0)

A continuación te mostramos unos ejemplos:

<?php
    $var1 = "valor5";
    $var2 = "4valor";
    $var3 = "867";
    $var4 = "867.56";
    $var5 = "867.56";
    $var6 = true;
    $var7 = 567;
    $var8 = 55.89;

    if( settype($var1, "integer") == true ) {
        if( is_int($var1) == true )
            echo "\$var1 es ahora integer y su valor es [".$var1."].<br/>";
    }

    if( settype($var2, "integer") == true ) {
        if( is_int($var2) == true )
            echo "\$var2 es ahora integer y su valor es [".$var2."].<br/>";
    }

    if( settype($var3, "integer") == true ) {
        if( is_int($var3) == true )
            echo "\$var3 es ahora integer y su valor es [".$var3."].<br/>";
    }

    if( settype($var4, "integer") == true ) {
        if( is_int($var4) == true )
            echo "\$var4 es ahora integer y su valor es [".$var4."].<br/>";
    }

    if( settype($var5, "float") == true ) {
        if( is_float($var5) == true )
            echo "\$var5 es ahora float y su valor es [".$var5."].<br/>";
    }

    if( settype($var6, "string") == true ) {
        if( is_string($var6) == true )
            echo "\$var6 es ahora string y su valor es [".$var6."].<br/>";
    }

    if( settype($var7, "string") == true ) {
        if( is_string($var7) == true )
            echo "\$var7 es ahora string y su valor es [".$var7."].<br/>";
    }

    if( settype($var8, "string") == true ) {
        if( is_string($var8) == true )
            echo "\$var8 es ahora string y su valor es [".$var8."].<br/>";
    }
?>

Descargar ejemplo

NOTA: para convertir un valor a entero es recomendable usar la función intval() ya que settype() puede devolver valores no esperados (ver más abajo).

Otra forma de convertir tipos de datos es usando el forzado de tipos o typecasting, indicando el tipo de dato hacia el que deseamos convertir:

  • (int) / (integer): forzado a integer.
  • (bool) / (boolean): forzado a boolean.
  • (float) / (double) / (real): forzado a float.
  • (string): forzado a string.
  • (array): forzado a array.
  • (object): forzado a object.
  • (unset): forzado a null (PHP 5).

Aquí puedes ver un ejemplo:

<?php

    $var1 = "valor5";
    $var2 = "4valor";
    $var3 = "867";
    $var4 = "867.56";
    $var5 = "867.56";
    $var6 = true;
    $var7 = 567;
    $var8 = 55.89;

    // Realizar la conversión:
    $var1 = (int) $var1;
    $var2 = (int) $var2;
    $var3 = (int) $var3;
    $var4 = (int) $var4;
    $var5 = (float) $var5;
    $var6 = (string) $var6;
    $var7 = (string) $var7;
    $var8 = (string) $var8;

    if( is_int($var1) == true )
        echo "\$var1 es ahora integer y su valor es [".$var1."].<br/>";

    if( is_int($var2) == true )
        echo "\$var2 es ahora integer y su valor es [".$var2."].<br/>";

    if( is_int($var3) == true )
        echo "\$var3 es ahora integer y su valor es [".$var3."].<br/>";

    if( is_int($var4) == true )
        echo "\$var4 es ahora integer y su valor es [".$var4."].<br/>";

    if( is_float($var5) == true )
        echo "\$var5 es ahora float y su valor es [".$var5."].<br/>";

    if( is_string($var6) == true )
        echo "\$var6 es ahora string y su valor es [".$var6."].<br/>";

    if( is_string($var7) == true )
        echo "\$var7 es ahora string y su valor es [".$var7."].<br/>";

    if( is_string($var8) == true )
        echo "\$var8 es ahora string y su valor es [".$var8."].<br/>";

?>

Descargar ejemplo

El resultado obtenido es el mismo en ambos ejemplos:

Convertir tipos de datos

Tal y como hemos comentado anteriormente, para convertir un valor a entero en lugar de utilizar settype() es recomendable usar intval(), ya que la primera puede devolver valores no esperados tal y como puedes ver en el siguiente ejemplo:

<?php
    $cadena1 = "02";
    $cadena2 = intval($cadena1);
    $cadena3 = ((int) $cadena1);

    echo "\$cadena1 = '02'<p />";

    echo "settype(\$cadena1, 'int'): [".settype($cadena1, "int")."]<br />";
    echo "intval(\$cadena2): [".$cadena2."]<br />";
    echo "(int) \$cadena3: [".$cadena3."]<br />";
?>

Descargar ejemplo

Convertir tipo de datos

También disponemos de las funciones de PHP strval() y floatval() que devuelven el valor de cadena y el valor flotante (parte entera y decimal) de una variable, respectivamente.

Más información

Vea también: [ settype() ] - [ intval() ] - [ floatval() ] - [ strval() ]

Pasar variables por referencia

Cuando pasamos como parámetro una variable a una función en PHP lo que hacemos realmente es pasar su valor (una copia de la misma), por lo que si ésta es modificada dentro de la función el cambio no permanecerá fuera de ella.

Se pueden pasar por referencia:

  • Variables, tal como miFuncion( $a )
  • Nuevas declaraciones, tal como miFuncion( new objeto() )
  • Referencias devueltas desde funciones
<?php

    function funcion1($n1)
    {
        $n1 = $n1 + 10;
    }

    // ---------------------

    function funcion2(&$n1)		// Pasar por referencia
    {
        $n1 = $n1 + 10;
    }

    // ---------------------

    class Clase1
    {
        private $valor = null;

        public function clase1()
        {
            $this->valor = 100;
        }

        public function &getValor()	// Devolver por referencia
        {
            return $this->valor;
        }
    }

    // ---------------------

    $num1 = 5;
    $num2 = 10;
    $num2 = &$num1;		// Asignación por referencia: '$num2' no apunta a '$num1', ambas apuntan al mismo lugar

    echo "\$num1 = [".$num1."] y \$num2 = [".$num2."]<br />";	// Devuelve: "$num1 = [5] y $num2 = [5]"

    $num2 = 20;

    echo "\$num1 = [".$num1."] y \$num2 = [".$num2."]<br />";	// Devuelve: "$num1 = [20] y $num2 = [20]"

    $n1 = 2;

    funcion1($n1);
    echo "Ahora \$n1 = [".$n1."]<br />";	// Devuelve: "Ahora $n1 = [2]"

    funcion2($n1);
    echo "Ahora \$n1 = [".$n1."]<br />";	// Devuelve: "Ahora $n1 = [12]"

    $obj = new Clase1();
    $x = &$obj->getValor();

    echo "\$x = [".$x."]<br />";			// Devuelve: "$x = [100]"

    $x = 200;
    $x = &$obj->getValor();

    // Devuelve: "$x = [200]" (¡¡ ojo porque la propiedad es 'private' y no debiera ser modificada fuera de la clase !!)
    echo "\$x = [".$x."]";

?>

Descargar ejemplo

Referencias

Información

Si una variable es referenciada por otra y después es eliminada, la otra variable seguirá conservando su valor (ya que ésta no apunta a la primera como sucede al utilizar punteros, sino que ambas apuntan a la misma dirección de memoria).

Información

Por lo tanto, no hay que confundir las referencias con los punteros de otros lenguajes de programación, no debiendo utilizarse con la intención de aumentar el rendimiento al pretender que el código PHP sea procesado más rápidamente.

Constantes en PHP

Para declarar una constante (variable cuyo valor no podrá ser modificado) utilizaremos la función define(), escribiendo el nombre en mayúsculas (según la nomenclatura estándar) y sin usar el símbolo '$' en el nombre:

<?php
    // Declarar (crear) las constantes:
    define("PI", 3.14);
    define("MENSAJE", "Hola");

    // Mostrar el valor de las constantes:
    echo "El valor de PI es: [".PI."]<br/>";
    echo "Mensaje: ".MENSAJE."<p/>";

    // Otra forma de obtener el valor:
    echo "PI = ".constant("PI")."<br/>";
    echo "MENSAJE = ".constant("MENSAJE")."<p/>";

    echo "----------------<br/>";
    echo "Fin del ejemplo.";
?>

Descargar ejemplo

Constantes en PHP

Observa que para obtener el valor de una constante podemos usar tanto echo como la función constant().

Fíjate también en que para concatenar una cadena de texto con el valor de una constante es necesario hacerlo usando el operador de concatenación (el punto).

Si necesitamos averiguar si una constante está definida usaremos la función defined().

Desde desde PHP 5.3.0 también es posible crear una constante usando const, como puedes ver en el siguiente ejemplo:

<?php
    // Declarar (crear) las constantes:
    const PI = 3.14;
    const MENSAJE = "Hola";

    // Mostrar el valor de las constantes:
    echo "El valor de PI es: [".PI."]<br/>";
    echo "Mensaje: ".MENSAJE."<p/>";

    echo "----------------<br/>";
    echo "Fin del ejemplo.";
?>

Descargar ejemplo

Información

IMPORTANTE: las constantes creadas con define() pueden ser definidas y accedidas en cualquier parte (no se aplican las reglas sobre el ámbito o alcance de variables), sin embargo las creadas usando const deben ser definidas al principio.

Primera página Anterior Siguiente Última página
Usamos cookies para ofrecerte una experiencia mejorada, el continuar navegando supone que aceptas su uso