Casi todo lo que PHP produce es texto: el HTML de la página es un texto largo.
Por eso trabajar con cadenas (string) es lo que más vas a hacer: unir un saludo con
un nombre, poner un precio con puntos de miles, limpiar los espacios que dejó un
usuario.
Comillas dobles y simples
Las dos crean un texto. La diferencia es que las dobles reemplazan las variables
por su valor, y las simples no.
El HTML usa comillas dobles en sus atributos. Para no mezclarlas, envuelve el texto
de PHP en simples cuando lleva HTML sin variables, o usa comillas simples en el
atributo.
Incorrecto: comillas dobles dentro de comillas dobles
Correcto: con texto en español, usa la versión mb_
Si el texto puede tener tildes o ñ (nombres, ciudades, cualquier cosa que
escriba un usuario), usa mb_strlen, mb_strtoupper, mb_strtolower y
mb_substr.
Call to undefined function mb_strlen()
Las funciones mb_ vienen en un paquete aparte. Si aparece este error, instálalo
y vuelve a levantar el servidor:
trim es la primera línea de cualquier dato de un usuario
Si alguien escribe " ana@correo.cl " con un espacio al final (pasa al copiar y
pegar), sin trim() el correo no calza con nada. En la
Parte 6 cada dato de un formulario pasa primero por
trim().
Números con formato
number_format() convierte un número en texto con separador de miles y la cantidad
de decimales que elijas. Por defecto usa el formato inglés (coma para miles y punto
para decimales); en Chile es al revés, así que se le indican los separadores.
number_format($precio, 0, ",", ".")
---+-- + -+- -+-
| | | `- separador de miles
| | `------ separador de decimales
| `---------- cantidad de decimales
`--------------- el número
Incorrecto: calcular con el número ya formateado
number_format() devuelve un texto. Si después intentas sumar "15.990" + 10,
PHP lee 15.99 y da 25.99. Formatea al final, solo para mostrar.
Correcto: calcula con el número, formatea al imprimir
Imprime el mismo texto con una variable usando comillas dobles y simples, y compara
Arma tu nombre completo con . y luego agrégale tu carrera con .=
Compara strlen("Magallanes") con strlen("Magallánes") y luego con mb_strlen
Muestra 1234567 como $1.234.567
Error provocado: escribe un enlace HTML con comillas dobles dentro de comillas dobles
Errores comunes
Síntoma
Causa
Solución
Se imprime $nombre en vez del valor
Usaste comillas simples
Usa comillas dobles, o concatena con .
syntax error, unexpected identifier en una línea con HTML
Comillas dobles del atributo dentro de comillas dobles
Alterna comillas o escribe el HTML fuera de PHP
Unsupported operand types: string + string
Uniste textos con +
Usa .
Call to undefined function mb_strlen()
Falta el paquete php-mbstring
sudo apt install php-mbstring
El largo de un texto con tildes da de más
strlen cuenta bytes
Usa mb_strlen
Checkpoint
Intenta responder antes de desplegar cada pregunta.
¿Qué imprime echo 'Total: $total';?
Literalmente Total: $total. Con comillas simples las variables no se reemplazan.
¿Por qué mb_strlen("Ñuñoa") y strlen("Ñuñoa") dan distinto?
strlen cuenta bytes, y cada ñ ocupa 2: da 7. mb_strlen cuenta letras: da
5.
¿Qué tiene de malo guardar number_format($precio, 0, ",", ".") y luego sumarle algo?
Que number_format devuelve un texto pensado para mostrar. "15.990" vuelve
a leerse como 15.99 al sumar. Se calcula con el número y se formatea al final.
¿Por qué un correo con un espacio al final no se reconoce como igual a otro?
Porque "ana@correo.cl " y "ana@correo.cl" son textos distintos. Se soluciona
con trim() antes de compararlos o guardarlos.