3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Libro { // 1. Ahora son PRIVATE (Solo la propia clase puede tocarlas) private $titulo; private $autor; private $precio; public function __construct($titulo, $autor, $precio) { $this->titulo = $titulo; $this->autor = $autor; // Usamos el setter interno para validar el precio inicial también $this->setPrecio($precio); } // --- GETTERS (Obtener info) --- public function getTitulo() { return $this->titulo; } public function getPrecio() { return $this->precio; } // --- SETTERS (Modificar info con reglas) --- public function setPrecio($nuevoPrecio) { // Aquí está la MAGIA: Validación if ($nuevoPrecio >= 0) { $this->precio = $nuevoPrecio; } else { echo "❌ Error: El precio no puede ser negativo ($nuevoPrecio). Se mantiene el anterior.<br>"; } } public function mostrarInfo() { // Como estamos DENTRO de la clase, sí podemos acceder a $this->precio directamente return "📖 Libro: {$this->titulo}, Autor: {$this->autor}, Precio: {$this->precio}€<br>"; } } // --- ZONA DE PRUEBAS --- $libro1 = new Libro("Harry Potter", "J.K. Rowling", 20); // $libro1->precio = -10; // ESTO AHORA DARÍA ERROR FATAL (No puedes acceder a propiedad privada) // Forma correcta de intentar cambiar el precio: echo "Intentando poner precio negativo...<br>"; $libro1->setPrecio(-50); // El setter bloqueará esto echo "Intentando poner precio correcto...<br>"; $libro1->setPrecio(15); // El setter aceptará esto echo "<hr>"; echo $libro1->mostrarInfo(); // Para leer un dato suelto: echo "El precio actual es: " . $libro1->getPrecio() . "€"; ?>
Output for 8.3.0 - 8.3.30, 8.4.1 - 8.4.18, 8.5.0 - 8.5.3
Intentando poner precio negativo...<br>❌ Error: El precio no puede ser negativo (-50). Se mantiene el anterior.<br>Intentando poner precio correcto...<br><hr>📖 Libro: Harry Potter, Autor: J.K. Rowling, Precio: 15€<br>El precio actual es: 15€

preferences:
56.73 ms | 406 KiB | 5 Q