Programación en Ambiente Web (11086) - 2018
Butler, T., & Yank, K. (2017). PHP & MySQL: Novice to Ninja: Get Up to Speed With PHP the Easy Way. SitePoint.
CAPITULO 2
Fuente: CS142: Web Applications
Instalación de Lenguaje Server-Side:
Windows / Mac / Linux
Version: PHP7 (7.4.X)
php -v
Entorno
Editor o IDE
Configuraciones
Web Server
Apache
Nginx
Standalone server para dev
php -S localhost:8000
<?php
echo "¡Hola Mundo!";
hello-world.php
<!DOCTYPE HTML>
<html>
<head>
<title>Ejemplo</title>
</head>
<body>
<?php
echo "¡Hola Mundo!";
?>
</body>
</html>
hello-world-html.php
$ php hello-world.php
<!DOCTYPE HTML>
<html>
<head>
<title>Ejemplo</title>
</head>
<body>
¡Hola Mundo!
</body>
</html>
CLI
$ php -S localhost:8888
PHP 7.2.7-1 Development Server started at Thu Jul 19 19:59:26 2018
Listening on http://localhost:8888
Document root is /home/tomas/workspace/paw/repo-clases/clase-2/php
Press Ctrl-C to quit.
[Thu Jul 19 20:01:19 2018] 127.0.0.1:59142 [404]: /robots.txt - No such file or directory
[Thu Jul 19 20:01:19 2018] 127.0.0.1:59144 [404]: / - No such file or directory
[Thu Jul 19 20:01:19 2018] 127.0.0.1:59146 [404]: /favicon.ico - No such file or directory
[Thu Jul 19 20:01:19 2018] 127.0.0.1:59148 [404]: /favicon.ico - No such file or directory
[Thu Jul 19 20:01:36 2018] 127.0.0.1:59150 [200]: /hello-world.php
Browser
<?php
# Definicion de Variables
$variable_entera = 5 ;
$variable_float = 10.5 ;
echo $variable_entera, $variable_float ; // imprime variable por stdin
# No se definen tipos de datos
$variable_sin_tipo = 5 ;
$variable_sin_tipo = 5.1 ;
# Operadores
$suma = $variable_entera + $variable_sin_tipo ;
$resta = 5 - 5 ;
$multiplicacion = 2 * 5 ;
$division = 6 / 2 ;
echo $suma ;
/**
* Strings
*/
$nombre = "Tomas";
$str1 = "Hola PAW 2020";
$str2 = 'Hola PAW 2020';
$str3 = "Mi nombre es " . $nombre . ". Mucho gusto."; // concatenar strings
$str4 = "Mi nombre es $nombre. Mucho gusto."; // string formateado
$str4 = 'Mi nombre es $nombre. Mucho gusto.'; // no funciona con comillas simples
// booleanos
$valor_bool = true ; // false
$resultado_booelano = 5 == 4;
$operadores = true || false && (true && false);
$operadores = $valor_bool ||
$resultado_booelano &&
(6 >= 5 || $valor_bool);
/**
* Arreglos y arreglso asociativos
*/
$lista_de_cosas = array("texto", 4, 5, array("mas texto", 10.5), true);
// Otra forma de declarar el mismo array
$lista_de_cosas = ["texto", 4, 5, ["mas texto", 10.5], true];
// y en multiples lineas para mas legible
$lista_de_cosas = [
"texto",
4,
5,
[
"mas texto",
10.5
],
true
];
// array asociativo (o hash o diccionario)
$assoc_array = [
2 => 'dos',
5 => 'cinco',
'seis' => 6,
'ocho' => [
1, 2, 3, 4, 5, 6, 7, 8
]
];
// asignacion en array
$numeros = [];
$numeros[1] = 'uno';
$numeros[2] = 'dos';
$numeros[3] = 'tres';
$numeros[4] = 'cuatro';
/**
* Estructuras de control
*/
$dato_de_aplicacion = rand(1, 10) ; // funcion y asignacion
// if ... else if ... else
if ($dato_de_aplicacion <= 5) {
echo "Es menor a 5";
} else if (is_integer($dato_de_aplicacion)) {
echo "Es un entero mayor que 5";
} else {
echo "Es otra cosa";
}
// for
echo "\n\nRepeticiones\n";
$repeticiones = [];
for ($index=0; $index < 1000; $index++) {
$random = rand(0, 10);
//$repeticiones[$random] += 1 ;
$repeticiones[$random] = $repeticiones[$random] + 1 ;
// Lo anterior funciona pero no es correcto, que falta?
}
print_r($repeticiones);
// tambien hay while similar al resto de los lenguajes
// mas interesante es el foreach
$productos = [
"m" => "mate",
"c" => "cafe",
"h" => "harina",
"p" => "palmitos"
];
echo "<select name='productos'>";
foreach ($productos as $clave => $valor) {
echo "<option value='$clave'>$valor</option>";
}
echo "</select>";
// podemos definir funciones
function sumar($valor1, $valor2)
{
return $valor1 + $valor2 ;
}
Mezclar HTML y PHP (short tags)
Construcción y Procesamiento de $_GET
Procesamiento de entradas de usuario
Separación de vista y controlador
Característica que reúne el código fuente que por diversos motivos hace que exista un montón de problemas a la hora de seguir su lógica, arreglar errores o agregar funcionalidad
Algunos indicios del código spaghetti
Fowler, M., Beck, K., Brant, J., Opdyke, W., & Roberts, D. (1999). Refactoring: improving the design of existing code. Addison-Wesley Professional.
Es el proceso de modificar sistemáticamente el código fuente sin afectar la funcionalidad que ofrece el mismo pero reduciendo su complejidad o clarificando y modularizando adecuadamente
En algunas metodologías (como XP) la refactorización es parte integral del proceso y es una de las maneras que permite manejar la deuda tecnica en relación al código fuente
<!DOCTYPE html>
<html>
<head>
<title>Vista</title>
</head>
<?php
$productos = [
"mate",
"cafe",
"harina",
"palmitos"
];
$cantidades = [4, 5, 2, 3];
?>
<body>
<ul>
<?php
foreach ($productos as $k => $producto) {
echo "<li>" . ucfirst($producto);
if (isset($_GET['mostrar_cantidades'])) {
echo " " . $cantidades[$k];
}
echo "</li>";
}
?>
</ul>
</body>
</html>
<?php
$productos = [
"mate",
"cafe",
"harina",
"palmitos"
];
$cantidades = [4, 5, 2, 3];
$mostrarCantidad = isset($_GET['mostrar_cantidades']);
require "index.view.php";
<!DOCTYPE html>
<html>
<head>
<title>Vista</title>
</head>
<body>
<ul>
<?php foreach ($productos as $idx => $producto) : ?>
<li>
<?= ucfirst($producto) ?>
<?= $mostrarCantidad ? " ${cantidades[$idx]}" : "" ?>
</li>
<?php endforeach; ?>
</ul>
</body>
</html>
index.php
index.view.php