Sei sulla pagina 1di 17

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 config.php
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
config.php
Aplicacion.php
Usuario.php
mysql\ Aquí dejamos los .sql
index.php

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

https://help.one.com/hc/es/articles/115005586169--Qué-es-htaccess-

Tema 3.3: Código en el servidor - Objetos en PHP 4


2 config.php
config.php 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 config.php

Invocación en programas:

require_once __DIR__.'/includes/config.php’;

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 config.php

Tienes que introducir estos cambios en config.php

// 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 config.php,
Aplicación.php y Usuario.php eliminando el código innecesario
• Estos programas tienen la misma estructura:
• Index.php
• Login.php
• Logout.php
• Contenido.php
• Procesarlogin.php
• Registro.php
• 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: login.php');
exit();

La función header provoca una redirección

https://www.php.net/manual/es/function.header.php

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 login.php y registro.php para que utilicen las
clases anteriores
• Eliminar los scripts procesarLogin.php y procesarRegistro.php que ya
no son necesarios

Tema 3.1 Ejecución de código en el servidor 16


Referencias

Clase usuario
https://gist.github.com/AlfonsoMonroyIV/10340565
Clase aplicacion
https://gist.github.com/jonashansen229/4534794

Tema 3.3: Código en el servidor - Objetos en PHP 17

Potrebbero piacerti anche