BLOQUE 2 PHP: PROGRAMACIÓN ORIENTADO A OBJETOS
¡Construyendo componentes!
PHP Como lenguaje orientado a objetos
Ejercicio 1: Clase Empleado
- Confeccionar una clase Empleado, definir como atributos su nombre y sueldo.
- Definir un método inicializarlo para que lleguen como dato el nombre y sueldo.
- Plantear un segundo método que imprima el nombre y un mensaje si debe o no pagar impuestos (si el sueldo supera a 3000 paga impuestos)
|
Ejercicio 1: Clase Menu
- Confeccionar una clase llamada Menu.
- Permitir añadir diferentes opciones al menú, según necesitáramoss.
- Mostrar el menú en forma horizontal o vertical (según que método llamemos)
|
Clase Racional
- Construir una clase llamado racional.
Se necesita que se pueda inicializar de diferentes formas, según se especifica:
new Racional();// 1/1
new Racional(5);// 5/1
new Racional(5,7);// 5/7
new Racional("9/7);// 9/7
- Implementa los siguientes métodos
- .-El método __toString, para visualizarlo,
- .-El método sumar, para sumar al objeto actual, y Racional que recibamos como argumento.
- .-El método restar, para restar al objeto actual, y Racional que recibamos como argumento.
- .-El método multiplicar, para multiplicar al objeto actual, y Racional que recibamos como argumento.
- .-El método dividir, para dividir al objeto actual, y Racional que recibamos como argumento.
- Todos los métodos aritméticos anteriores me deben retornar un Racional simplificado
|
Tienda base con Array
- A partir de un array de productos, por ejemplo:
$productos=[
'lechuga' => ['unidades' => 200,
'precio' => 0.90],
'tomates' =>['unidades' => 2000,
'precio' => 2.15],
'cebollas' =>['unidades' => 3200,
'precio' => 0.49],
'fresas' =>['unidades' => 4800,
'precio' => 4.50],
'manzanas' =>['unidades' => 2500,
'precio' => 2.10],
];
Realizamos una pequeña aplicación con los siguientes requisitos
RF1: Un usuario debe acceder registrándos (usuario y passowrd) .
El criterio será que usuario y password coincidan, si no,
nos informará de datos incorrectos
RF2: Una vez accedido nos mostrará un listado con todos los productos y sus precios
RF3: También nos mostrará un formulario para poder comprar productos
RF4: Una vez indicado los productos selecionados nos mostrará la factura .
Nunca podrá facturar más productos de los que haya en existencias.
RNF:Se debe programar orientado a objetos, con dos clases: Productos.php y Cesta.php
A continuación se muestra una posible solución
Cesta.php |
---|
<?php
class Cesta
{
/**
* @var $cesta Un array asociativo con los productos comprados
*/
private $cesta;
//Inicializo los atributos de la clase
public function __construct(){
$this->cesta = [];
}
// añade el producto en la cesta
//Contabiliza no comprar más productos de las existencias
public function add_producto($productos, $producto, $unidades){
if ($unidades> $productos[$producto]['unidades']) {
$unidades = $productos[$producto]['unidades'];
var_dump($unidades);
}
$this->cesta[$producto]=$unidades;
}
//Generemos una factua de la compra
public function generar_factura($productos):string{
$factura = "<fieldset><legend>Factura </legend>";
$total=0; //inicializo para evitar un warning
foreach ($this->cesta as $producto=> $unidades) {
$precio = $productos[$producto]['precio'];
$subtotal = floatval($unidades) * $precio; //convierto a float $unidades para evitar warning!!
$factura.="<h3>$unidades de $producto a $precio = $subtotal</h3>";
$total+=$subtotal;
}
$factura .="<h3> Total de productos comprados <span style='color:red'>".sizeof($this->cesta)."</span></h3>";
$factura .="<h2> Importe total de la factura <span style='color:red'>$total</span></h2>";
return $factura;
}
}
?>
|
Producto.php |
---|
<?php
class Producto
{
/**
* @var $productos Un array con un listado
de productos (unidades y precio) para poder comprar
*/
private $productos;
const LISTADO_PRODUCTOS=[
'lechuga' => ['unidades' => 200,
'precio' => 0.90],
'tomates' =>['unidades' => 2000,
'precio' => 2.15],
'cebollas' =>['unidades' => 3200,
'precio' => 0.49],
'fresas' =>['unidades' => 4800,
'precio' => 4.50],
'manzanas' =>['unidades' => 2500,
'precio' => 2.10],
];
//Inicializo los atributos de la clase
public function __construct(){
$this->productos = self::LISTADO_PRODUCTOS;
}
public function get_productos(): array{
return $this->productos;
}
}
|
index.php |
---|
<?php
$msj=$_GET["msj"] ?? "";
if (isset($_POST['submit'])){
$name = $_POST['name'];
$pass = $_POST['pass'];
if ($name ===$pass){
header ("Location:tienda.php?name=$name");
exit();
}else{
$msj ="Datos incorrectos";
}
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="estilo.css">
</head>
<body>
<form action="index.php" method="post">
<fieldset>
<h2><?=$msj?></h2>
<legend>Datos de acceso</legend>
usuario : <input type="text" name="name" id=""><br />
pass <input type="text" name="pass" id=""><br />
<input type="submit" value="Validar" name="submit">
</fieldset>
</form>
</body>
</html>
|
tienda.php |
---|
<?php
spl_autoload_register(function ($clase){
require("$clase.php");
});
$productos = new Producto();
$listado = $productos->get_productos();
$opcion = $_POST['submit'] ?? null;
if ($opcion =='Comprar'){
$cesta = new Cesta();
$compra = $_POST['compra'];
foreach ($compra as $producto_comprado=>$unidades) {
$cesta->add_producto($listado, $producto_comprado, $unidades);
}
$factura = $cesta->generar_factura($listado);
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Listado de productos</title>
<link rel="stylesheet" href="estilo.css">
</head>
<body>
<fieldset>
<legend>Listado de productos disponibles</legend>
<?php
foreach ($listado as $producto=>$contendio) {
echo "<h2>$producto ({$contendio['precio']}€) </h2>";
}
?>
</fieldset>
<?php
//Si no hay factura muestro el formulario para comprar
if (!isset($factura)):?>
<fieldset>
<legend>Compra</legend>
<form action="tienda.php" method="post">
<?php
foreach ($listado as $producto=>$contendio) {
echo "<h4>$producto ({$contendio['precio']}€)";
echo "<input type='text' name='compra[$producto]' > </h4>";
}
?>
<input type="submit" value="Comprar" name="submit">
</form>
</fieldset>
<?php else:
//Si hay factura la muestro, en lugar del formulario para comprar
echo "$factura";
?>
<form action="tienda.php" method="post">
<input type="submit" value="Volver a comprar" name="submit">
</form>
<?php endif?>
</body>
</html>
|
estilo.css |
---|
fieldset{
width: 50%;
background: bisque;
margin:100px
}
legend{
size : 2em;
color:blue;
}
input[type=text]{
size : 1.4em;
color:blue;
}
input[type=submit]{
size : 1.8em;
color:blue;
}
|
|