/
clausuras_ambito.php
83 lines (61 loc) · 1.84 KB
/
clausuras_ambito.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
/**
* Ejemplo por php.net
*
* ===
*
* Un carro de compras básico que contiene una lista de productos añadidos
* y la cantidad de cada producto. Incluye un método que
* calcula el precio total de los artículos del carro usando una
* clausura como llamada de retorno.
*/
class Carro {
const PRECIO_MANTEQUILLA = 1.00;
const PRECIO_LECHE = 3.00;
const PRECIO_HUEVOS = 6.95;
/**
* [$productos]
* @var array
*/
protected $productos = array();
/**
* [agregar función]
* @param [type] $producto [description]
* @param [type] $cantidad [description]
* @return [type] [description]
*/
public function agregar ($producto, $cantidad) {
$this->productos[$producto] = $cantidad;
}
/**
* [obtenercantidad función]
* @param [type] $producto [description]
* @return [type] [description]
*/
public function obtenercantidad ($producto) {
return isset($this->productos[$producto]) ? $this->productos[$producto] : FALSE;
}
/**
* [obtenerTotal función]
* @param [type] $impuesto [description]
* @return [type] [description]
*/
public function obtenerTotal ($impuesto) {
$total = 0.0;
$llamadaDeRetorno = function ($cantidad, $producto) use ($impuesto, &$total) {
$precioUnitario = constant(__CLASS__ . "::PRECIO_" . strtoupper($producto));
$total += ($precioUnitario * $cantidad) * ($impuesto + 1.0);
};
array_walk($this->productos, $llamadaDeRetorno);
return round($total, 2);
}
}
/**
* Ejecutando la clase
*/
$mi_carro = new Carro;
// Añadir
$mi_carro->agregar('mantequilla', 1);
$mi_carro->agregar('leche', 3);
$mi_carro->agregar('huevos', 6);
print $mi_carro->obtenerTotal(0.05) . "\n";