Ejemplo S脷PER Simple sin constructor

馃搧 Ejemplo S脷PER Simple sin constructor

php
<?php
// =============================================
// MODELO - La nevera (guarda los datos)
// =============================================
class ModeloProductos {
    
    // M茅todo est谩tico - no necesita crear objeto
    public static function obtenerProductos() {
        return [
            ["nombre" => "馃崕 Manzana", "precio" => 15, "stock" => 20],
            ["nombre" => "馃崒 Pl谩tano", "precio" => 12, "stock" => 15],
            ["nombre" => "馃崐 Naranja", "precio" => 18, "stock" => 8],
            ["nombre" => "馃 Aguacate", "precio" => 25, "stock" => 5]
        ];
    }
    
    // Otro m茅todo para practicar
    public static function obtenerTotalProductos() {
        return count(self::obtenerProductos());
    }
}

// =============================================
// CONTROLADOR - El vendedor (conecta la nevera con el cliente)
// =============================================
class ControladorProductos {
    
    // M茅todo para obtener productos
    public function mostrarProductos() {
        // Llama directamente al modelo (est谩tico)
        return ModeloProductos::obtenerProductos();
    }
    
    // M茅todo para obtener el total
    public function mostrarTotal() {
        return ModeloProductos::obtenerTotalProductos();
    }
    
    // M茅todo para productos con poco stock
    public function mostrarProductosCriticos() {
        $todos = ModeloProductos::obtenerProductos();
        $criticos = [];
        
        foreach($todos as $producto) {
            if($producto['stock'] < 10) {
                $criticos[] = $producto;
            }
        }
        
        return $criticos;
    }
}

// =============================================
// VISTA - El mostrador (lo que ve el cliente)
// =============================================
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tiendita MVC</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <style>
        .producto-card {
            transition: transform 0.2s;
        }
        .producto-card:hover {
            transform: translateY(-5px);
            box-shadow: 0 4px 15px rgba(0,0,0,0.2);
        }
        .stock-bajo {
            background-color: #ffecb3;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <div class="container mt-5">
        <h1 class="text-center mb-4">馃洅 Mi Tiendita MVC</h1>
        
        <?php
        // PASO 1: Crear controlador (as铆 de simple)
        $tienda = new ControladorProductos();
        
        // PASO 2: Pedir datos al controlador
        $productos = $tienda->mostrarProductos();
        $total = $tienda->mostrarTotal();
        $criticos = $tienda->mostrarProductosCriticos();
        ?>
        
        <!-- Tarjeta de resumen -->
        <div class="row mb-4">
            <div class="col-md-4 mx-auto">
                <div class="card text-center bg-primary text-white">
                    <div class="card-body">
                        <h3><?php echo $total; ?></h3>
                        <p>Total de Productos</p>
                    </div>
                </div>
            </div>
        </div>
        
        <!-- Productos con poco stock -->
        <?php if(!empty($criticos)): ?>
        <div class="alert alert-warning">
            <strong>⚠️ Alerta:</strong> Hay <?php echo count($criticos); ?> productos con stock bajo
        </div>
        <?php endif; ?>
        
        <!-- Tabla de productos -->
        <div class="row">
            <div class="col-12">
                <div class="card">
                    <div class="card-header bg-success text-white">
                        <h5 class="mb-0">馃摝 Lista de Productos</h5>
                    </div>
                    <div class="card-body">
                        <table class="table table-bordered">
                            <thead class="table-dark">
                                <tr>
                                    <th>Producto</th>
                                    <th>Precio</th>
                                    <th>Stock</th>
                                    <th>Estado</th>
                                </tr>
                            </thead>
                            <tbody>
                                <?php foreach($productos as $producto): 
                                    $claseStock = $producto['stock'] < 10 ? 'table-warning' : '';
                                ?>
                                <tr class="<?php echo $claseStock; ?>">
                                    <td><?php echo $producto['nombre']; ?></td>
                                    <td>$<?php echo $producto['precio']; ?></td>
                                    <td><?php echo $producto['stock']; ?></td>
                                    <td>
                                        <?php if($producto['stock'] < 10): ?>
                                            <span class="badge bg-warning text-dark">¡Reabastecer!</span>
                                        <?php else: ?>
                                            <span class="badge bg-success">Disponible</span>
                                        <?php endif; ?>
                                    </td>
                                </tr>
                                <?php endforeach; ?>
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>
        </div>
        
        <!-- Explicaci贸n simple -->
        <div class="row mt-4">
            <div class="col-12">
                <div class="card bg-light">
                    <div class="card-body">
                        <h5>馃幆 ¿C贸mo funciona?</h5>
                        <ol class="list-group list-group-numbered">
                            <li class="list-group-item">El <strong>Modelo</strong> tiene los datos (productos)</li>
                            <li class="list-group-item">El <strong>Controlador</strong> los pide: <code>$tienda->mostrarProductos()</code></li>
                            <li class="list-group-item">La <strong>Vista</strong> los muestra bonitos en tabla</li>
                        </ol>
                        <p class="mt-3 mb-0 text-muted">
                            <small>✅ No usamos constructor - m谩s simple para empezar</small>
                        </p>
                    </div>
                </div>
            </div>
        </div>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

馃摑 Comparaci贸n R谩pida

Con ConstructorSin Constructor
$this->modelo->metodo()Modelo::metodo()
M谩s profesionalM谩s simple
Mejor para crecerIdeal para aprender
El controlador "tiene un" modeloEl controlador "usa" el modelo

馃挕 Tips para tus alumnos:

  1. Primero entiendan el flujo (Vista → Controlador → Modelo)

  2. Despu茅s aprendan sobre static (m茅todos que se llaman sin crear objeto)

  3. M谩s adelante agreguen constructores (cuando vean inyecci贸n de dependencias)

馃幃 Mini Ejercicio para practicar:

php
// 1. Agreguen al MODELO:
public static function buscarProducto($nombre) {
    $productos = self::obtenerProductos();
    foreach($productos as $p) {
        if(strpos($p['nombre'], $nombre) !== false) {
            return $p;
        }
    }
    return null;
}

// 2. Agreguen al CONTROLADOR:
public function buscarProducto($nombre) {
    return ModeloProductos::buscarProducto($nombre);
}

// 3. Usen en la VISTA:
$resultado = $tienda->buscarProducto("Manzana");

¿Te sirvi贸 esta explicaci贸n? ¡Los m茅todos est谩ticos son perfectos para empezar!

Comentarios

Entradas m谩s populares de este blog

token

¿Qu茅 es un token y c贸mo se utiliza en una API?

Generaci贸n de Credenciales API