1
<!DOCTYPE html>
<html>
<body>
<h2>Constructor Property Promotion (PHP 8.3)</h2>
<?php
class CuadernoInteractivo {
// Definición compacta y moderna: PHP crea las propiedades automáticamente
public function __construct(
public string $titulo,
public string $slug,
public int $totalSpreads = 25,
public string $colorAcento = "#2563eb",
public bool $esPublico = true
) {}
public function renderTarjeta(): string {
$estado = $this->esPublico
? "<span style='color:#10b981; font-weight:bold;'>✓ Disponible</span>"
: "<span style='color:#ef4444; font-weight:bold;'>🔒 Requiere Matrícula</span>";
return "
<div style='border:1px solid #cbd5e1; border-left: 6px solid {$this->colorAcento}; border-radius: 6px; padding: 12px 16px; margin-bottom: 12px; background:#ffffff;'>
<h3 style='margin:0 0 4px 0;'>{$this->titulo}</h3>
<p style='margin:0 0 6px 0; color:#64748b; font-size:0.85rem;'>Ruta: <code>/cuadernos/{$this->slug}/</code></p>
<p style='margin:0; font-size:0.9rem;'>
Capítulos: <strong>{$this->totalSpreads} spreads</strong> · Acceso: {$estado}
</p>
</div>";
}
}
// 1. Instanciación posicional tradicional
$cuaderno1 = new CuadernoInteractivo(
"Proyecto Fullstack: JS, PHP & MySQL",
"proyecto-fullstack",
25,
"#059669",
true
);
// 2. Instanciación con Argumentos con Nombre (Named Arguments de PHP 8)
$cuaderno2 = new CuadernoInteractivo(
titulo: "PHP & MySQL con Seguridad y PDO",
slug: "php-mysql-seguro",
colorAcento: "#7c3aed",
esPublico: false
// 'totalSpreads' toma su valor por defecto: 25
);
echo $cuaderno1->renderTarjeta();
echo $cuaderno2->renderTarjeta();
?>
</body>
</html>
Haz clic para editar este código