Propiedades y Metodos
Las propiedades almacenan el estado de un objeto. Los metodos definen su comportamiento. Juntos forman la esencia de la programacion orientada a objetos.
Propiedades con tipos
Las propiedades pueden tener diferentes tipos. Siempre especifica el tipo:
<?php
declare(strict_types=1);
class Usuario
{
public string $nombre;
public int $edad;
public float $saldo;
public bool $activo;
public array $roles = [];
public ?string $telefono = null; // Nullable
}
Una propiedad tipada sin valor por
defecto debe asignarse antes de leerse.
Si intentas leer
$nombre sin haberle dado
valor, PHP lanzara un error.
Metodos
Un metodo es una funcion que pertenece a una clase:
<?php
declare(strict_types=1);
class Rectangulo
{
public float $ancho;
public float $alto;
public function area(): float
{
return $this->ancho * $this->alto;
}
public function perimetro(): float
{
return 2 * ($this->ancho + $this->alto);
}
}
$rect = new Rectangulo();
$rect->ancho = 10;
$rect->alto = 5;
echo $rect->area(); // 50
echo $rect->perimetro(); // 30
La palabra clave $this
$this es una referencia al objeto
actual. La usamos dentro de los metodos para
acceder a propiedades y otros metodos:
<?php
declare(strict_types=1);
class Contador
{
public int $valor = 0;
public function incrementar(): void
{
$this->valor++;
}
public function decrementar(): void
{
$this->valor--;
}
public function reiniciar(): void
{
$this->valor = 0;
}
}
$contador = new Contador();
$contador->incrementar();
$contador->incrementar();
$contador->decrementar();
echo $contador->valor; // 1
Metodos con parametros
<?php
declare(strict_types=1);
class CuentaBancaria
{
public float $saldo = 0;
public function depositar(float $cantidad): void
{
if ($cantidad > 0) {
$this->saldo += $cantidad;
}
}
public function retirar(float $cantidad): bool
{
if ($cantidad > 0 && $cantidad <= $this->saldo) {
$this->saldo -= $cantidad;
return true;
}
return false;
}
}
$cuenta = new CuentaBancaria();
$cuenta->depositar(1000);
$cuenta->retirar(250);
echo $cuenta->saldo; // 750
Encadenamiento de métodos
Si un metodo retorna $this, podemos
encadenar llamadas:
<?php
declare(strict_types=1);
class Calculadora
{
public float $resultado = 0;
public function valor(float $n): self
{
$this->resultado = $n;
return $this;
}
public function sumar(float $n): self
{
$this->resultado += $n;
return $this;
}
public function multiplicar(float $n): self
{
$this->resultado *= $n;
return $this;
}
}
$calc = new Calculadora();
$calc->valor(10)->sumar(5)->multiplicar(2);
echo $calc->resultado; // 30
self como tipo de retorno
indica que el metodo devuelve una
instancia de la misma clase. Es lo que
permite el encadenamiento.
Ejercicios
Ejercicio 1: Clase Circulo
Crea una clase Circulo con
propiedad radio y metodos
area() y
perimetro(). Usa
M_PI.
Ver solucion
<?php
declare(strict_types=1);
class Circulo
{
public float $radio;
public function area(): float
{
return M_PI * $this->radio ** 2;
}
public function perimetro(): float
{
return 2 * M_PI * $this->radio;
}
}
$circulo = new Circulo();
$circulo->radio = 5;
echo "Area: " . $circulo->area() . "\n"; // 78.539...
echo "Perimetro: " . $circulo->perimetro() . "\n"; // 31.415...
Ejercicio 2: Clase Temporizador
Crea una clase
Temporizador con propiedad
segundos y metodos
agregarMinutos(int $min),
agregarHoras(int $h) y
formatear() que retorne
"HH:MM:SS".
Ver solucion
<?php
declare(strict_types=1);
class Temporizador
{
public int $segundos = 0;
public function agregarMinutos(int $min): void
{
$this->segundos += $min * 60;
}
public function agregarHoras(int $h): void
{
$this->segundos += $h * 3600;
}
public function formatear(): string
{
$h = (int) ($this->segundos / 3600);
$m = (int) (($this->segundos % 3600) / 60);
$s = $this->segundos % 60;
return sprintf('%02d:%02d:%02d', $h, $m, $s);
}
}
$timer = new Temporizador();
$timer->agregarHoras(2);
$timer->agregarMinutos(30);
$timer->segundos += 45;
echo $timer->formatear(); // 02:30:45
Ejercicio 3: Clase StringBuilder
Crea una clase con metodos encadenables:
agregar(string $texto),
agregarLinea(string $texto)
y obtener().
Ver solucion
<?php
declare(strict_types=1);
class StringBuilder
{
public string $contenido = '';
public function agregar(string $texto): self
{
$this->contenido .= $texto;
return $this;
}
public function agregarLinea(string $texto): self
{
$this->contenido .= $texto . "\n";
return $this;
}
public function obtener(): string
{
return $this->contenido;
}
}
$sb = new StringBuilder();
$resultado = $sb
->agregarLinea('Hola Mundo')
->agregar('PHP ')
->agregar('es ')
->agregarLinea('genial')
->obtener();
echo $resultado;
// Hola Mundo
// PHP es genial
¿Has encontrado un error o tienes una sugerencia para mejorar esta leccion?
Escribenos¿Te está gustando el curso?
Tenemos cursos premium con proyectos reales y soporte personalizado.
Descubrir cursos premium