Introducción a PHP

Programación en Ambiente Web (11086) - 2018

Bibliografía

Butler, T., & Yank, K. (2017). PHP & MySQL: Novice to Ninja: Get Up to Speed With PHP the Easy Way. SitePoint.

CAPITULO 2

Otros Recursos

Ciclo Request - Response

Primeros Conceptos

  • Scripting
  • Embebido en HTML
  • Tipado Dinamico y debil
  • CLI

Intro

  • Instalacion
  • Opciones
  • Plataforma
  • CLI

Instalacion

  • 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

Standalone Server

php -S localhost:8000

Primeros Pasos

"Hola Mundo" en PHP

<?php
    echo "¡Hola Mundo!";
hello-world.php

"Hola Mundo" en PHP

<!DOCTYPE HTML>
<html>
    <head>
        <title>Ejemplo</title>
    </head>
    <body>

        <?php
            echo "¡Hola Mundo!";
        ?>

    </body>
</html>
hello-world-html.php

Ejecución vía CLI

$ php hello-world.php
<!DOCTYPE HTML>
<html>
    <head>
        <title>Ejemplo</title>
    </head>
    <body>

        ¡Hola Mundo!
    </body>
</html>

Ejecución vía Server

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

Ejecución vía Server

Browser

Elementos del Lenguaje

  • Variables
    • Definición
    • Tipos de datos básicos
      • Operadores
    • Tipos de datos  estructurados
      • arrays
      • arrays asociativos
  • Ver estado de variables
  • Condicional
  • Loops
  • Salida con formato y manejo de strings
  • Funciones

Elementos del Lenguaje

<?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 ;
}

Cuestiones

Mezclar HTML y PHP (short tags)

 

Construcción y Procesamiento de $_GET

 

Procesamiento de entradas de usuario

 

Separación de vista y controlador

Spaghetti Code

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

Spaghetti Code

Algunos indicios del código spaghetti

 

  • Un único archivo reúne todo el procesamiento y construcción de vista
  • No hay modularidad (sin funciones, sin objetos, sin librerías)
  • No hay clara separación de conceptos
  • Formato de código inconsistente

Refactorización

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

Codigo Spaghetti

<!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>

Refactorizacion

<?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

Backend Programming - Intro a PHP

By Tomas Delvechio

Backend Programming - Intro a PHP

Introducción a la Programación en PHP

  • 1,293