Home
Temas
Preguntas
Webs Amigas

Tecnología y Cultura
Sexo y Religión


Derechos Animales
Fotos Naturaleza
Ecología y Filosofía

Copyleft
Licencia de Creative Commons
Temas >> PHP
Tipos de Dato y Operadores
PHP es un lenguaje en que usualmente el tipo de dato de una variable no se hace explícito, sino que es escogido por el intérprete de acuerdo a como son ingresados los datos.

Los enteros son ingresados directamente. Pueden ser especificados en decimal, octal o hexadecimal.

$num_positivo = 1981;

$num_negativo = -12;

$num_octal = 0755;

$num_hexadecimal = 0x00FF00;

$num_satanico = 666;

Los números con punto flotante se pueden ingresar con un punto decimal o con notación científica.

$num_pi = 3.1415926535;

$num_grande = 1.2e18; # 1.2 x 10^18

Estos son almacenados por el sistema como números de doble precisión (8 bytes).

Los strings se expresan entre comillas dobles, comillas simples o con sintaxis de string multilínea.

Las comillas dobles, significan que dentro del string las variables deben ser interpoladas (interpretadas):

$agua = "vino"; echo( "Bebamos $agua" ); # Bebamos vino

Las comillas simples implican que el string debe tomarse literalmente, sin interpolar variables:

echo( 'Bebamos $agua' ); # Bebamos $agua

La sintaxis multilínea, disponible desde PHP versión 4, tiene el siguiente formato:

$variable =<<<IDENTIFICADOR texto1 texto2 texto3 IDENTIFICADOR;

[Nota para programadores PERL] En PHP son tres '<' y el ';' va al final de la expresión. La idea es la misma pero la sintaxis es distinta.

Cuando se interpolan variables, se consideran las siguientes secuencias de escape:

\n Avance de Linea
\n Avance de Linea
\n Avance de Linea
\r Retorno de carro
\" "
\$ $
\\ \
\t tab
\NNN Caracter octal NNN
\xNNN Caracter hex NNN

Cuando no se interpolan variables, las únicas secuencias de escape son \' y \\

Como una conveniencia del lenguaje, se permite accesar a un carácter dentro de un string como si el string fuese un arreglo de caracteres (aunque a ningún nivel lo es):

$string = "hola";

echo $string[4]; # Imprime 'a'

echo $string[strlen($string)-1]; # Imprime 'a'

Un arreglo puede ser construído explicitando elemento a elemento, cada uno de los cuales puede tener un tipo distinto:

$a[0] = 13;

$a[1] = "xxx";

$a[3] = 42;

$a[4] = 1.992;

También se puede usar la función array(), que toma una lista variable de argumentos y retorna un arreglo con ellos:

$a = array(13, "xxx", 42, 1.992 );

echo $a[3]; # Imprime 42

Nótese que array() es una función, y por tanto sólo puede usarse al lado derecho de una expresión. Para operaciones de asignación múltiples, así como para recibir explícitamente valores de una función que retorna un arreglo, se usa el constructo list():

list($a,$b,$c,$d) = array( 13, "xxx", 42, 1.992 ); function pareja_historica() { $duo[0] = "sanson"; $duo[1] = "dalila"; return $duo; }; list($hombre, $mujer) = pareja_historica();

[Nota para programadores PERL] El uso de array() y list() requiere tiempo adicional de experiencia para usuarios de Perl, puesto que en Perl estos operadores son implícitos.

Existe una forma fácil de agregar elementos a un arreglo unidimensional, simplemente no se especifica la posición del elemento nuevo:

$animales[0] = "perro";

$animales[1] = "gato";

$animales[] = "vaca"; # Lo mismo que $animales[2] = "vaca"

Para un arreglo multidimensional, se utilizan las mismas ideas anteriores, combinadas recursivamente:

$a[0][0] = "Elemento cero,cero";

$a[0][1] = "Elemento cero,uno";

$a[1][0] = "Elemento uno,cero";

$a[1][1] = "Elemento uno,uno";

$a[0] = array( "Elemento cero,cero", "Elemento cero,uno" );

$a[1] = array( "Elemento uno,cero", "Elemento uno,uno" );

$a = array(array( "Elemento cero,cero", "Elemento cero,uno" ), array( "Elemento uno,cero", "Elemento uno,uno" ));

Dentro de un string y cuando corresponde, sólo los arreglos unidimensionales son interpolados:

$str = "Este es el $a[0][1]"; # No funciona

$str = "Este es el " . $a[0][1]; # Ahora sí

Un arreglo asociativo es un arreglo en que los índices son strings, del mismo modo que en una tabla de hashing.

$apellido["Pedro"] = "González";

$apellido["José"] = "Pérez";

$apellido["Juan"] = "Zapata";

[Nota para programadores PERL] En PHP se utiliza corchete [] y no llave {}, para arreglos asociativos.

array() también puede usarse para crear arreglos asociativos, utilizando '=>' para explicitar las llaves.

$apellido = array( "Pedro" => "González", "José" => "Pérez", "Juan" => "Zapata" );

PHP presenta mucha flexibilidad. Se pueden incluso crear arreglos multidimensionales, mezclando llaves que son números o strings.

Cambiar una variable de tipo puede hacerse de dos formas, manual o automática. La conversión automática significa que PHP buscará el tipo apropiado para el resultado de una operación dependiendo del tipo de los operandos y del operador. Si los dos operandos son del mismo tipo (ej.: dos enteros), el resultado será de ese tipo (entero), el resto se comporta de acuerdo a la siguiente tabla:


Operadores Resultados
int float float
int string int (operador matematico)
int string string (concatenacion)
float string float (matematico)

$entero = 123;

$flotante = 9.231;

$texto = "10";

$a = $entero + $flotante; # (float)132.231

$a = $texto + $texto; # (int)20

$a = $texto + $entero; # (int)143

$a = $entero . $texto; # (string)"12310"

$a = $texto . $entero; # (string)"12310"

La regla para convertir un string en número es utilizar los primeros caracteres que formen un número. Si este número es entero, se convierte a entero. Si contiene notación científica se convierte a flotante.

La conversión de tipo de dato se puede hacer usando una sintaxis como la de C:

$a = (int)$flotante; # (int)9

$a = (string)$flotante; # (string)"9.231"

Los castings permitidos son:

(int) (integer) Entero

(real) (double) (float) Flotante

(string) String

(array) Arreglo

(object) Objeto

Las conversiones a tipo arreglo y objeto merecen mención aparte:

$var = "hola";

$varArr = (array)$hola; # es lo mismo que array($hola) !

echo $varArr[0]; # hola

$varObj = (object)$var;

echo $varObj->escalar; # La variable pasa a ser una propiedad del objeto

Adicionalmente, existe una forma "sucia" de alterar el tipo, mediante settype( "variable", "tipo" ). Para obtener un string con el tipo de una variable, se usa gettype("variable").

Para números, los operadores + - * / % (suma, resta, multiplicación, división y resto), así como asignación y operación combinada:

$a = 2;

$a += 3; # $a == 5, válido para los otros operadores también

Existe pre y post incremento y decremento:

$a = 1; $b = $a++; # $b == 1 && $a == 2

$a = 1; $b = ++$a; # $b == 2 && $b == 2

Sobre bits, & | ^ <%lt; %gt;%gt; (and, or, xor, shift left, shift right)

Sobre strings . (concatenación de dos strings). Nótese que el operador + no concatena strings, sino que los interpreta como números si es posible (si no como cero) y los suma.

De comparación (entre strings y entre números), == != < > <= >=, y el operador ternario de condicionalidad de C:

$tipo_de_palabra = ( $palabra == "hola") ? "saludo" : "despedida";

[Nota para programadores PERL] En PHP la comparación entre strings y entre números es idéntica (i.e.: en vez de eq, se ocupa ==).

Para control de errores, se provee el operador @, que aplicado a una llamada a función, evita todo tipo de mensaje de error (en caso de error, simplemente retorna falso).

Como operadores lógicos, se definen ! && || (not, and, or), así como not and or que son iguales a los anteriores pero tienen menor precedencia, lo que permite hacer cosas como:

$a || $b or echo "ni a ni b son verdaderos";

Alojamiento Web

ChaTo = Carlos Castillo, Ph.D.  :::  Acerca de este Sitio ChaTo = Carlos Castillo, Ph.D. ::: Acerca de este Sitio