php-clases-y-objetos-en-php

Clases y objetos en PHP

  • 2 min

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:

  1. Propiedades: Datos (variables) que tendrá el objeto.
  2. 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";
    }
}
Copied!

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();
Copied!

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 4
Copied!

La 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";
        }
    }
}
Copied!

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)
Copied!

Cuando uses $this, la propiedad NO lleva el signo dólar.

  • Mal: $this->$bateria
  • Bien: $this->bateria