Primeros pasos con PHP
Ya sabes programar; ahora toca mudarse de lenguaje
Marco González Luengo
El lenguaje de este ramo es PHP 8.5. Si llegaste hasta aquí ya sabes programar (en Python, seguramente), así que esto no es aprender de nuevo: es mudarse de lenguaje. La mayoría de las ideas son las mismas; lo que cambia es la sintaxis y un par de mañas.
Dónde probar el código
- Aquí mismo. Los ejemplos que empiezan con
<?phptienen un botón ▶ Ejecutar. También los puedes editar antes de correrlos (Ctrl + Enter los ejecuta), y si te enredas, "Restaurar" deja el código como estaba. - En 3v4l.org. Pegas el código y lo corre en muchas versiones de PHP. Ojo: lo que pegues ahí queda público, así que nada de datos reales.
- En tu computador. Más adelante vas a necesitar un entorno de verdad: revisa Herramientas para PHP.
En ninguno de los dos primeros hay input(), así que los datos van escritos en el mismo código.
Lo mismo, dos veces
Un programa en Python que ya sabrías escribir:
nombre = "Ana"
notas = [6.0, 5.5, 4.8]
for n in notas:
print(f"Nota: {n}")
def promedio(ns: list) -> float:
return sum(ns) / len(ns)
print(nombre, promedio(notas))
Y el mismo programa en PHP:
<?php
declare(strict_types=1);
$nombre = "Ana";
$notas = [6.0, 5.5, 4.8];
foreach ($notas as $n) {
echo "Nota: {$n}\n";
}
function promedio(array $ns): float {
return array_sum($ns) / count($ns);
}
echo $nombre, " ", promedio($notas), "\n";
Lo único realmente nuevo:
- El archivo parte con
<?php. - Cada variable lleva
$adelante. - Cada instrucción termina en
;. - Los bloques van entre llaves
{ }; la indentación es solo para que se lea bien.
¿Y el declare(strict_types=1)? Hace que PHP se tome en serio los tipos. Lo vemos con calma en Funciones; por ahora, ponlo siempre en la primera línea.
Mostrar cosas en pantalla
Hay tres formas que vas a usar todo el tiempo:
echomuestra texto, pensado para personas.print_rmuestra arrays de forma legible.var_dumpmuestra el tipo y el valor exacto. Es la que sirve para depurar.
<?php
$notas = [6.3, 4.8, 6.1];
echo "Hola", PHP_EOL; // PHP_EOL es un salto de línea
print_r($notas);
var_dump($notas);
Y a veces no muestran lo mismo:
<?php
declare(strict_types=1);
function promedio(array $ns): float {
return array_sum($ns) / count($ns);
}
$mi_promedio = promedio([6.3, 4.8, 6.1, 2.0, 6.9]);
echo $mi_promedio, PHP_EOL;
var_dump($mi_promedio);
echo redondea para mostrar; var_dump muestra el valor real, con todo y el error de precisión que tienen los números de punto flotante en cualquier lenguaje (en Python también pasa).
Comentarios
<?php
// Comentario de una línea
# También de una línea, pero casi no se usa
/*
Comentario de
varias líneas
*/
echo "Los comentarios no se ejecutan", PHP_EOL;
Un truco útil para probar: comentar un bloque entero con /* */ y descomentarlo de a poco. Más en el manual.
Si vienes de Python
Aquí es donde la intuición de Python te va a hacer perder tiempo. Cada una se explica en su tema:
| En Python | En PHP | La trampa |
|---|---|---|
"a" + "b" |
"a" . "b" |
El + suma números o une arrays, pero nunca concatena texto. Ver Texto. |
"0" == False es falso |
"0" == false es verdadero |
== convierte tipos antes de comparar. Usa ===. Ver Decisiones y ciclos. |
elif, and, not |
elseif, &&, ! |
and y or existen, pero con otra precedencia. Ver Decisiones y ciclos. |
d["x"] lanza KeyError |
$d["x"] avisa y da null |
El programa no se detiene. Ver Arrays. |
| Una función lee variables globales | Una función no ve nada de afuera | Todo entra por parámetro. Ver Funciones. |
Una función que hace lista.append() cambia la lista original |
Una función que agrega a un array cambia su copia | Los arrays se pasan por valor. Ver Parámetros por referencia. |
La cuarta es la que más muerde: en Python el programa se cae; en PHP sigue con un null adentro, y el error aparece mucho después.
Para tener a mano
El manual de PHP en español es bueno de verdad. Cada función tiene su página con ejemplos, y en este sitio vamos a enlazarlo seguido.
Sigue con Texto.