|
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";
|