Desarrollo de aplicaciones web con PHP y MySQL

Módulos en PHP

Sergio Sáez y José Luis Poza

E.T.S. de Ingeniería Informática

Módulos en PHP

<?php // sentencia.php
  
echo "Una sentencia simple<br>\n";
?>
<?php
  
echo "Éste es el fichero principal<br>\n";
  require 
"sentencia.php";
  echo 
"Y termina aquí<br>\n";
?>
Éste es el fichero principal<br>
Una sentencia simple<br>
Y termina aquí<br>

Módulos en PHP (cont.)

 // incorrecto.php
 echo "Una sentencia simple<br>\n";
<?php
  
echo "Éste es el fichero principal<br>\n";
  require 
"incorrecto.php";
  echo 
"Y termina aquí<br>\n";
?>
Éste es el fichero principal<br>
 // incorrecto.php
 echo "Una sentencia simple<br>\n";
Y termina aquí<br>

Ámbito de las variables

<?php // muestra.php
echo "Muestra \$a: '$a'\n";
$b"Saludo desde el módulo";
?>
<?php
$a
"Un valor";
include 
"muestra.php";
echo 
"Muestra \$b: '$b'\n";
?>
Muestra $a: 'Un valor'
Muestra $b: 'Saludo desde el módulo'

Extensiones de los ficheros

Inclusiones múltiples

<?php // utiles.php
function causaError() {
  return 
"Esta función va a causar error!";
}
?>
<?php // biblioteca.php
require "utiles.php";
function 
muestra_valor($var) {
  echo 
$var;
}
?>
<?php
require "biblioteca.php";
// La siguiente inclusión fallará
require "utiles.php";
?>

Restricciones

<?php // archivo.php
echo "Sentencia uno!";
echo 
"Sentencia dos!";
<?php // otro.php
echo "Otra sentencia uno!";
echo 
"Otra sentencia dos!";
<?php
 
/* Esto es ERRÓNEO y
    no funcionará como se desea. */
 
if ($condicion)
     include 
"archivo.php";
 else
     include 
"otro.php";

 
/* Esto es CORRECTO. */
 
if ($condicion) {
     include 
"archivo.php";
 } else {
     include 
"otro.php";
 }
<?php
 
// Equivale a esto
 
if ($condicion)
   echo 
"Sentencia uno!";
   echo 
"Sentencia dos!";
 else
   echo 
"Otra sentencia uno!";
   echo 
"Otra sentencia dos!";

 
/* Esto es CORRECTO. */
 
if ($condicion) {
   echo 
"Sentencia uno!";
   echo 
"Sentencia dos!";
 } else {
   echo 
"Otra sentencia uno!";
   echo 
"Otra sentencia dos!";
 }

Diferencias entre require e include

<?php include "noexiste.php"?>
PHP Warning: include(noexiste.php): failed to open stream: No such file or directory in Standard input code on line 1 PHP Warning: include(): Failed opening 'noexiste.php' for inclusion (include_path='.:/usr/share/php') in Standard input code on line 1
<?php require "noexiste.php"?>
PHP Warning: require(noexiste.php): failed to open stream: No such file or directory in Standard input code on line 1 PHP Fatal error: require(): Failed opening required 'noexiste.php' (include_path='.:/usr/share/php') in Standard input code on line 1

Volviendo de un fichero incluido

<?php // fichero-con-return.php
echo "Esto se muestra";
return;
echo 
"Esto no se muestra";
<?php
include "fichero-con-return.php";
<?php // config.php
return [
    
"path" => "/una/ruta",
    
"debug" => true,
];
<?php
$config 
= require "ejemplos/config.php";
var_dump($config);
array(2) {
  ["path"]=>
  string(9) "/una/ruta"
  ["debug"]=>
  bool(true)
}

Modificando la ruta de inclusión

get_include_path
Devuelve la ruta de inclusión definida en este momento, por ejemplo:
.:/usr/share/php:/usr/share/pear.
set_include_path
Establece la nueva ruta de inclusión.
PATH_SEPARATOR
Esta constante define el separador de directorios en la ruta de inclusión sobre esta plataforma.

Ejemplo

<?php

$phplib
=  "/home/cursophp/lib/php";
set_include_path(get_include_path() . PATH_SEPARATOR $phplib);

?>

Patrones para aplicaciones web

Patrones para aplicaciones web (cont.)

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
  <head>
    <title>Tienda de recambios de Bob</title>
    <link rel="stylesheet" TYPE="text/css" href="style.css">
  </head>
  <body>
    <table class="page" cellpadding="12" cellspacing="12" width="100%">
      <tr valign="middle">
        <td class="header"> <img src="titulo.png"> </td>
      </tr>
      <tr> <td class="content">
 <h1>Bienvenidos a la tienda de recambios de Pep!</h1>
 <p>Nos alegramos de volver a verle!</p>
      </td> </tr>
      <tr> <td class="footer">
           <center>
              <address>
                 <small>Tienda de Recambios de BOB.</small>
                 <small>Hora: <?php echo date("H:i:s"); ?></small>
                 <small>Fecha: <?php echo date("j/m/Y"); ?></small><br>
                 <small>Webmaster:
                        <a href="mailto:ssaez@disca.upv.es">ssaez@disca.upv.es</a></small>
              </address>
           </center>
      </td> </tr>
    </table>
   </body>
</html>

Patrones para aplicaciones web (cont.)

<?php require "header.php"; ?>

 <h1>Bienvenidos a la tienda de recambios de Pep!</h1>
 <p>Nos alegramos de volver a verle!</p>

<?php require "footer.php"; ?>

Inclusión dinámica de módulos


<h1>Cesta de la comprar</h1>
<form action="peticion.php" method="post">
<table>
  <tr><td>Producto</td><td>Cantidad</td></tr>
  <tr><td>Ruedas</td><td>4</td></tr>
  <tr><td>Aceite</td><td>2</td></tr>
  <tr><td>Bujias</td><td>6</td></tr>
</table>
<input type="submit" name="facturar" value="Facturar">
<input type="submit" name="cancelar" value="Cancelar">
</form>

Inclusión dinámica de módulos (cont.)


<?php // peticion.php
if (isset($_POST["facturar"))) {
   
$accion"facturar";
} elseif (isset(
$_POST["cancelar"))) {
   
$accion"cancelar";
} else {
   
$accion"error";
// endif

include "ejecutar_{$accion}.php";
?>


Inclusión dinámica de módulos (cont.)

<h1>Cesta de la comprar</h1>
<form action="peticion.php" method="post">
<table>
  <tr><td>Producto</td><td>Cantidad</td></tr>
  <tr><td>Ruedas</td><td>4</td></tr>
  <tr><td>Aceite</td><td>2</td></tr>
  <tr><td>Bujias</td><td>6</td></tr>
</table>
<input type="submit" name="boton[facturar]" value="Facturar">
<input type="submit" name="boton[cancelar]" value="Cancelar">
</form>

Inclusión dinámica de módulos (cont.)


<?php // peticion.php
if (isset($_POST["boton"]))) {
   
$accionkey($_POST["boton"]);
} else {
   
$accion"error";
// endif

include "ejecutar_{$accion}.php";
?>