Una clase es la definición que agrupa el estado y el comportamiento de un tipo de objeto
En programación:
- El Plano es la CLASE (Class).
- La Casa es el OBJETO (Object) o Instancia.
Definiendo una clase (class)
Una clase es el molde. Es un bloque de código donde definimos dos cosas:
- Propiedades: Datos (variables) que tendrá el objeto.
- Métodos: Comportamientos (funciones) que podrá realizar.
Vamos a crear una clase para representar un Dron.
Convención: Los nombres de las clases siempre empiezan con Mayúscula (PascalCase). Ej:
Dron,UserProfile,CarroCompra.
class Dron {
// Propiedades (El estado)
// En PHP moderno TIPAMOS las propiedades
public string $modelo;
public int $bateria = 100; // Valor por defecto
// Métodos (El comportamiento)
public function despegar(): void {
echo "El dron está despegando... 🚀\n";
}
}Acabamos de crear el plano. Pero todavía no tenemos ningún dron volando.
Creando objetos (new)
Para convertir ese plano en algo real que ocupe memoria, usamos la palabra clave new. A este proceso se le llama Instanciar.
// Crear (instanciar) el primer objeto
$miDron = new Dron();
// Crear un segundo objeto totalmente independiente
$tuDron = new Dron();Ahora $miDron y $tuDron son objetos reales. Son del tipo Dron, pero viven separados.
Accediendo a los datos (->)
Para entrar dentro del objeto (acceder a sus propiedades o métodos) usamos la flecha simple ->.
// Asignamos valores
$miDron->modelo = "Mavic Pro";
$tuDron->modelo = "Phantom 4";
// Leemos valores
echo $miDron->modelo; // Salida: Mavic Pro
echo $tuDron->modelo; // Salida: Phantom 4La variable pseudo $this
Aquí es donde la cabeza suele hacer “clic”.
Si estoy dentro de la clase Dron escribiendo el código de un método (por ejemplo, mostrarEstado), ¿cómo hago referencia a mi propia batería? No sé cómo se llamará la variable fuera ($miDron, $obj1, $x…).
Para eso existe $this.
$this significa: “Yo mismo” o “Esta instancia actual”.
Vamos a mejorar nuestra clase:
class Dron {
public string $modelo;
public int $bateria = 100;
public function volar(): void {
// Queremos restar batería a ESTE dron específico
if ($this->bateria > 0) {
$this->bateria -= 10;
echo "Voooom! Batería restante: {$this->bateria}%\n";
} else {
echo "Batería agotada. No puedo volar.\n";
}
}
}Probemos la independencia
$dronA = new Dron();
$dronB = new Dron();
$dronA->volar();
// Salida: Voooom! Batería restante: 90%
// ($dronA ha usado $this para acceder a SU batería)
echo $dronB->bateria;
// Salida: 100
// (La batería de $dronB sigue intacta)Cuando uses $this, la propiedad NO lleva el signo dólar.
- Mal:
$this->$bateria❌ - Bien:
$this->bateria✅