VARIABLES, TIPOS Y SALIDA EN PHP¶
Estos apuntes son material de consulta para el Lab 02. Cubren los conceptos que vas a aplicar allí: cómo se declaran las variables en PHP, qué tipos básicos existen, cómo se construyen cadenas de texto, cómo se hacen cálculos y redondeos, cómo se depura con var_dump() y cómo se imprime en HTML escapando la salida.
Variables y tipado dinámico¶
Qué es el "tipado"¶
Cuando hablamos del tipado de un lenguaje nos referimos a cómo gestiona los tipos de dato (texto, número, booleano...). En algunos lenguajes como Java o C tienes que declarar el tipo antes de usar la variable: int edad = 30;. En otros lenguajes como bash, Python o PHP no declaras el tipo: el lenguaje lo deduce del valor que le asignas. A esto último se le llama tipado dinámico.
En PHP, la misma variable puede contener primero un número y luego una cadena sin que el lenguaje se queje. No declaras nada: asignas un valor y PHP se encarga del resto.
Declaración y asignación¶
Las variables en PHP siempre empiezan con $. No hay que declararlas antes de usarlas: la primera asignación las crea.
Comparación con bash:
| Bash | PHP | Nota |
|---|---|---|
titulo="texto" |
$titulo = 'texto'; |
En PHP el $ va siempre, también al asignar |
echo $titulo |
echo $titulo; |
Mismo concepto, en PHP el ; es obligatorio |
MI_VAR=42 |
$mi_var = 42; |
PHP distingue mayúsculas ($var ≠ $Var) |
A diferencia de bash, en PHP los espacios alrededor del
=son opcionales, pero se ponen siempre por legibilidad. El;al final de cada sentencia es obligatorio.
Tipos básicos¶
PHP tiene cuatro tipos escalares que cubren prácticamente todo lo que necesitas en el Lab 02:
| Tipo | Qué guarda | Ejemplo | gettype() devuelve |
|---|---|---|---|
| string | Texto | 'alta', "Impresora" |
"string" |
| int | Números enteros | 7, -3, 0 |
"integer" |
| float | Números con decimales | 3.14, 99.9 |
"double" |
| bool | Verdadero/falso | true, false |
"boolean" |
Como PHP es de tipado dinámico, el tipo no se declara: se deduce del valor. Estas cuatro líneas crean cuatro variables de cuatro tipos distintos:
$titulo = 'Impresora sin papel'; ## string
$num_abiertos = 7; ## int
$porcentaje = 42.5; ## float
$resuelto = false; ## bool
Booleanos en bash vs en PHP
En bash no existe un tipo booleano real: se simula con el código de salida de los comandos (0 = éxito = "verdadero"). En PHP true y false son valores propios del lenguaje y se pueden asignar a variables como cualquier otro valor.
Cadenas de texto¶
Las cadenas son, con diferencia, el tipo más usado: casi todo lo que envías al navegador es texto.
Comillas simples vs comillas dobles¶
PHP tiene dos formas de escribir cadenas y su comportamiento es diferente:
Comillas simples '...' |
Comillas dobles "..." |
|
|---|---|---|
| Variables dentro | No se expanden | Sí se expanden |
| Secuencias de escape | Solo \\ y \' |
Todas (\n, \t, \", etc.) |
| Uso recomendado | Cadenas literales | Cadenas con variables o saltos de línea |
Para cadenas sin variables usa comillas simples: es marginalmente más rápido y deja claro de un vistazo que no hay interpolación.
Tres formas de construir cadenas con variables¶
Esta es la decisión que vas a encontrar una y otra vez. Hay tres variantes equivalentes y conviene conocer las tres:
Las tres producen el mismo resultado: [alta] pendiente. La concatenación con . es la más explícita; la interpolación con comillas dobles es la más compacta; las llaves {$var} se usan cuando la variable queda pegada a otro texto y el intérprete necesita ayuda para saber dónde acaba el nombre.
Concatenar en bash vs en PHP
En bash dos cadenas pegadas se concatenan solas: echo "$a$b". En PHP necesitas el operador punto o meterlas dentro de la misma cadena con comillas dobles.
Números y operaciones¶
Aritmética¶
Los operadores son los mismos que en bash y en casi cualquier lenguaje: +, -, *, /, % (módulo).
Redondeo con round()¶
La división en PHP devuelve un float en cuanto no es exacta: $resueltas / $total es 0.3, pero si los datos cambian puede ser 0.333333333333.... Para presentar un número con un número fijo de decimales usa round($valor, $decimales):
Redondea al presentar, no al calcular
Haz las operaciones con todos los decimales y redondea solo cuando vayas a imprimir el resultado. Si redondeas antes, los errores se acumulan en cadenas de cálculos.
Depurar con var_dump()¶
echo imprime el valor de una variable, pero no te dice su tipo. Cuando algo no funciona como esperas — un número que se trata como texto, un booleano que sale vacío — necesitas ver el tipo. Para eso está var_dump():
Salida:
var_dump() te muestra tres cosas:
- El tipo (
string,int,bool, ...). - La longitud en el caso de cadenas (
string(4)= 4 caracteres). - El valor.
Usa var_dump() para depurar, no echo
Si sospechas que una variable "no vale lo que debería", echo te muestra el valor pero no te dirá si ese 0 es un entero o la cadena "0". var_dump() sí. Es la herramienta estándar de depuración rápida en PHP.
Salida: echo, <?= ?> y escape de HTML¶
echo¶
echo imprime en la respuesta HTTP que Apache devuelve al navegador. Es la instrucción básica de salida:
La etiqueta corta <?= ?>¶
Dentro de un fichero que mezcla HTML y PHP, escribir <?php echo $var; ?> cada vez que quieres imprimir una variable ensucia el código. PHP ofrece una forma corta equivalente:
Úsala siempre que vayas a imprimir una sola variable o expresión dentro de HTML.
Regla: texto sí se escapa, números no¶
Cuando una variable viene de un dato que podría contener caracteres HTML (<, >, ", &), imprimirla directamente es peligroso. Un < en un título se interpretará como el inicio de una etiqueta HTML y puede romper la página — o, peor, ejecutar código malicioso (ataque XSS).
htmlspecialchars() convierte esos caracteres en entidades HTML seguras:
| Carácter | Sin escapar | Con htmlspecialchars |
|---|---|---|
< |
Inicio de etiqueta HTML | < |
> |
Cierre de etiqueta HTML | > |
" |
Cierre de atributo | " |
& |
Inicio de entidad | & |
La regla práctica es sencilla: las cadenas de texto se escapan; los números no hace falta. Un int o un float solo pueden contener dígitos, punto y signo — no hay nada que escapar.
Mala práctica: imprimir cadenas sin escapar
El helper e()
Escribir htmlspecialchars($x, ENT_QUOTES, 'UTF-8') en cada imprimir se hace pesado. En el Lab 07 crearás un helper e() que abrevia la llamada, de forma que podrás escribir <?= e($titulo) ?>. Hasta entonces, usa la forma larga.