Saltar a contenido

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.

$titulo       = 'Impresora sin papel';
$prioridad    = 'alta';
$resuelto     = false;
$num_abiertos = 7;

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 se expanden
Secuencias de escape Solo \\ y \' Todas (\n, \t, \", etc.)
Uso recomendado Cadenas literales Cadenas con variables o saltos de línea
1
2
3
4
5
6
7
$titulo = 'Impresora sin papel';

## Comillas simples: la variable NO se expande
echo 'Incidencia: $titulo';       ## → Incidencia: $titulo

## Comillas dobles: la variable SÍ se expande
echo "Incidencia: $titulo";       ## → Incidencia: Impresora sin papel

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:

$prioridad = 'alta';
$estado    = 'pendiente';

## 1. Concatenación con el operador punto `.`
$etiqueta = '[' . $prioridad . '] ' . $estado;

## 2. Interpolación directa en comillas dobles
$etiqueta = "[$prioridad] $estado";

## 3. Interpolación con llaves (más clara cuando la variable va pegada a texto)
$etiqueta = "[{$prioridad}] {$estado}";

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).

1
2
3
4
$abiertas  = 7;
$resueltas = 3;
$total     = $abiertas + $resueltas;   ## 10
$ratio     = $resueltas / $total;      ## 0.3

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):

1
2
3
4
5
$porcentaje_bruto = $resueltas / $total * 100;   ## 30.0 o 33.33333...
$porcentaje       = round($porcentaje_bruto, 1); ## 1 decimal → 33.3

echo round(3.14159, 2);   ## 3.14
echo round(99.5);         ## 100 (sin segundo argumento, redondea a entero)

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():

1
2
3
4
5
6
$prioridad    = 'alta';
$num_abiertos = 7;
$resuelto     = false;
var_dump($prioridad);
var_dump($num_abiertos);
var_dump($resuelto);

Salida:

string(4) "alta"
int(7)
bool(false)

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:

1
2
3
4
$titulo = 'Impresora sin papel';
echo $titulo;
echo '<br>';
echo 'Prioridad: ' . $prioridad;

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:

1
2
3
<h2><?= $titulo ?></h2>
<!-- Es exactamente lo mismo que: -->
<h2><?php echo $titulo; ?></h2>

Ú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 &lt;
> Cierre de etiqueta HTML &gt;
" Cierre de atributo &quot;
& Inicio de entidad &amp;
htmlspecialchars($valor, ENT_QUOTES, 'UTF-8')

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.

1
2
3
4
5
$titulo       = 'Impresora <sin> papel';   ## string: viene del usuario
$num_abiertos = 7;                         ## int: lo generamos nosotros

echo htmlspecialchars($titulo, ENT_QUOTES, 'UTF-8');   ## escape obligatorio
echo $num_abiertos;                                    ## sin escape, no hace falta

Mala práctica: imprimir cadenas sin escapar

## Incorrecto: si $titulo contiene HTML, rompe la página o ejecuta código malicioso
echo $titulo;
echo "<h2>$titulo</h2>";
## Correcto: escapa siempre las cadenas antes de imprimirlas en HTML
echo htmlspecialchars($titulo, ENT_QUOTES, 'UTF-8');

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.