Tema 3.
3B
Aplicando OO al proyecto
1
Aplicando OO al proyecto
• El ejercicio 3 describe unos pasos a seguir para aplicar OO al proyecto y conseguir que tenga
una estructura más adecuada
• Es conveniente que estas adaptaciones las hagas en tu proyecto paso a paso para que te resulte
más fácil corregir los errores que se vayan produciendo
• En esta presentación se contemplan estos pasos:
1) Organización de carpetas
2) Fichero [Link]
3) Clase Aplicacion
4) Clase Usuario
5) Clase Formulario
• Ejemplos
• Ej33login: Programa sencillo de login de usuario que contiene los pasos 1 a 3
• Ej33usuario: Evolución de la aplicación del ejercicio 2 que contiene los pasos 1 a 4
• Ej33formulario: Aplica clase Formulario al ejercicio anterior
Tema 3.3: Código en el servidor - Objetos en PHP 2
1 Organización del proyecto en carpetas
includes\ Aquí dejamos los scripts que no son de vista
comun\ Aquí dejamos los scripts de apoyo para las vistas
[Link]
[Link]
[Link]
mysql\ Aquí dejamos los .sql
[Link]
Tema 3.3: Código en el servidor - Objetos en PHP 3
HTACCESS (Hypertext Access)
• Si lo deseas, puedes incluir un fichero HTACCESS para configurar
ajustes iniciales
• Se trata de un archivo de configuración utilizado por servidores web
basados en Apache
• Un archivo .htaccess se puede utilizar para:
• Proteger su sitio web con una contraseña
• Crear una página de error personalizada
• Redireccionar a otra página
[Link]
Tema 3.3: Código en el servidor - Objetos en PHP 4
2 [Link]
[Link] se ocupará de realizar las configuraciones del programa:
• session_start
• Soporte de UTF-8
• Localización (idioma y país)
• Formato de fecha
<?php
session_start();
/**Configuración del soporte de UTF-8, localización (idioma y país) y zona horaria */
ini_set('default_charset', 'UTF-8');
setLocale(LC_ALL, 'es_ES.UTF.8');
date_default_timezone_set('Europe/Madrid');
Tema 3.3: Código en el servidor - Objetos en PHP 5
2 [Link]
Invocación en programas:
require_once __DIR__.'/includes/[Link]’;
require: Si no se encuentra el programa, da error
_once: Evita que se incluya el fichero más de una vez
_DIR_: Variable predefinida que devuelve el directorio donde está el fichero
Tema 3.3: Código en el servidor - Objetos en PHP 6
3 Centralizar operaciones. Clase Aplicacion
La clase Aplicacion utiliza el patrón singleton para restringir a uno el número de
objetos que se pueden crear
Tema 3.3: Código en el servidor - Objetos en PHP 7
3 Centralizar operaciones. Clase aplicacion
<?php
/* Clase que mantiene el estado global de la aplicación. */
class Aplicacion
{
private static $instancia;
/** Permite obtener la única instancia de <code>Aplicacion</code>*/
public static function getSingleton() {
if ( !self::$instancia instanceof self) {
self::$instancia = new self;
}
return self::$instancia;
}
El resto del código puedes consultarlo en el ejercicio Ej33login
Tema 3.3: Código en el servidor - Objetos en PHP 8
3 Centralizar operaciones. Incluir en [Link]
Tienes que introducir estos cambios en [Link]
// Inicializa la aplicación
$app = Aplicacion::getSingleton();
$app->init(array('host'=>BD_HOST, 'bd'=>BD_NAME,
'user'=>BD_USER, 'pass'=>BD_PASS));
register_shutdown_function(array($app, 'shutdown'));
Tema 3.3: Código en el servidor - Objetos en PHP 9
4 Gestión de usuarios integrada
• El ejercicio Ej33usuario incorpora la clase Usuario al ejemplo del ejercicio2
• Se han realizado las adaptaciones oportunas para utilizar [Link],
Aplicació[Link] y [Link] eliminando el código innecesario
• Estos programas tienen la misma estructura:
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
• Difieren en el código necesario para gestionar lo que aparece en el apartado
contenido
Tema 3.3: Código en el servidor - Objetos en PHP 10
Métodos de la clase usuario
public static function buscaUsuario($nombreUsuario)
Devuelve un objeto Usuario con la información del usuario $nombreUsuario, o false si
no lo encuentra
public function compruebaPassword($password)
Comprueba si la contraseña introducida coincide
public static function login($nombreUsuario, $password)
Devuelve un objeto Usuario si el usuario existe y coincide su
contraseña. En caso contrario, devuelve false
public static function crea($nombreUsuario, $nombre, $password, $rol)
Crea un nuevo usuario con los datos introducidos por parámetro
Tema 3.3: Código en el servidor - Objetos en PHP 11
Función header
if (! isset($_POST['login']) ) {
header('Location: [Link]');
exit();
La función header provoca una redirección
[Link]
Tema 3.1 Ejecución de código en el servidor 12
Operador ternario
<?php
// Ejemplo de uso para: Operador Ternario
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
// Lo anterior es idéntico a esta sentencia if/else
if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}
?>
Tema 3.1 Ejecución de código en el servidor 13
Operador ternario: recomendable no apilar
condiciones
<?php
// a primera vista, lo siguiente parece tener la salida de 'true'
echo (true?'true':false?'t':'f');
// sin embargo, la salida real de lo anterior es 't'
// esto se debe a que las expresiones ternarias se evalúan de izquierda a derecha
// la siguiente es una versión más obvia del mismo código anterior
echo ((true ? 'true' : false) ? 't' : 'f');
// aquí, se puede ver que la primera expresión es evaluada como 'true', que
// a su vez se evalúa como (bool)true, retornando así la rama verdadera de la
// segunda expresión ternaria.
?>
Tema 3.1 Ejecución de código en el servidor 14
5 Clase formulario
• La gestión de los formularios HTML es muy similar por lo que es
posible utilizar el patrón TemplateMethod
• Se utilizará una clase Formulario para simplificar la creación y gestión
de formularios de toda la aplicación
• El ejemplo Ej33formulario aplica la clase formulario al ejemplo
Ej33usuario
Tema 3.1 Ejecución de código en el servidor 15
Objetivos al aplicar la clase Formulario
• Crear la clase FormularioLogin que hereda de Form e incluir toda la
lógica de gestión del formulario
• Crear la clase FormularioRegistro que hereda de Form e incluir toda la
lógica de gestión del formulario
• Modificar los scripts [Link] y [Link] para que utilicen las
clases anteriores
• Eliminar los scripts [Link] y [Link] que ya
no son necesarios
Tema 3.1 Ejecución de código en el servidor 16
Referencias
Clase usuario
[Link]
Clase aplicacion
[Link]
Tema 3.3: Código en el servidor - Objetos en PHP 17