Cómo configurar CodeIgniter 4 con Nginx en un VPS Ubuntu 20 paso a paso
Aprende a configurar CodeIgniter 4 con Nginx en un VPS Ubuntu 20. Guía completa para instalar, optimizar y desplegar tu aplicación web de forma segura y eficiente.
Leer másObjetivo: Esta guía está pensada para alguien con conocimientos básicos de programación en PHP (variables, funciones y estructuras de control). Aquí aprenderás desde los conceptos más importantes de la Programación Orientada a Objetos (POO) hasta ejemplos prácticos explicados paso a paso.
La Programación Orientada a Objetos (POO) es una forma de organizar el código usando clases y objetos:
¿Por qué usarla? Porque ayuda a:
<?php
class Persona {
public string $nombre; // propiedad pública
private int $edad; // propiedad privada
// Constructor: se ejecuta al crear la instancia
public function __construct(string $nombre, int $edad) {
$this->nombre = $nombre; // asigna la propiedad 'nombre'
$this->edad = $edad; // asigna la propiedad 'edad'
}
// Método: comportamiento de la clase
public function saludar(): string {
return "Hola, soy {$this->nombre} y tengo {$this->edad} años.";
}
}
// Crear (instanciar) un objeto
$p = new Persona("Andrés", 30);
echo $p->saludar(); // Muestra: Hola, soy Andrés y tengo 30 años.
Explicación línea por línea
class Persona { ... } define la plantilla.public string $nombre; es una propiedad accesible desde fuera.private int $edad; es una propiedad que sólo la clase puede usar directamente.__construct(...) es el constructor: recibe parámetros y prepara el objeto.$this->nombre refiere a la propiedad nombre del objeto actual.new Persona(...) crea una instancia (un objeto).Antes de PHP 8 había que declarar propiedades y luego asignarlas en el constructor. PHP 8 introdujo constructor property promotion para ahorrar código.
Forma clásica (PHP 7.x y anterior):
class UsuarioOld {
public string $nombre;
private string $email;
public function __construct(string $nombre, string $email) {
$this->nombre = $nombre;
$this->email = $email;
}
}
Con property promotion (PHP 8+):
class Usuario {
public function __construct(
public string $nombre,
private string $email
) {}
}
$u = new Usuario("Ana", "ana@example.com");
echo $u->nombre; // Ana
Consejo: usa promotion para DTOs y clases simples; para lógica compleja dentro del constructor usa la forma clásica.
public: accesible desde cualquier sitio.protected: accesible en la clase y sus subclases.private: accesible sólo dentro de la misma clase.Ejemplo con getters/setters (buena práctica):
class Cuenta {
private float $saldo = 0.0;
public function depositar(float $monto): void {
if ($monto <= 0) throw new InvalidArgumentException("Monto inválido");
$this->saldo += $monto;
}
// getter público para consultar saldo
public function obtenerSaldo(): float {
return $this->saldo;
}
}
$c = new Cuenta();
$c->depositar(100.50);
echo $c->obtenerSaldo(); // 100.5
Por qué usar private ? Para proteger el estado del objeto y validar cambios desde métodos controlados.
Las propiedades/métodos static pertenecen a la clase (no a la instancia).
class Contador {
public static int $cuenta = 0;
public static function incrementar(): void {
self::$cuenta++;
}
}
Contador::incrementar();
echo Contador::$cuenta; // 1
Cuándo usar: datos globales a todas las instancias (por ejemplo, contador de objetos, configuración compartida).
Permite crear clases hijas a partir de una clase padre.
class Animal {
public function hablar(): string {
return "...";
}
}
class Perro extends Animal {
public function hablar(): string {
return "Guau";
}
}
$perro = new Perro();
echo $perro->hablar(); // Guau
Nota práctica: si la clase hija necesita inicializar propiedades del padre, usa parent::__construct(...).
Abstract class: sirve como base y puede definir tanto métodos concretos como abstractos (sin implementación).
abstract class Figura {
abstract public function area(): float;
public function descripcion(): string {
return "Soy una figura";
}
}
class Rectangulo extends Figura {
public function __construct(private float $ancho, private float $alto) {}
public function area(): float {
return $this->ancho * $this->alto;
}
}
Interface: define un contrato puro; cualquier clase que implemente la interface debe definir esos métodos.
interface Jsonable {
public function toJson(): string;
}
class Producto implements Jsonable {
public function __construct(public string $nombre, public float $precio) {}
public function toJson(): string {
return json_encode(get_object_vars($this));
}
}
Cuándo usar cada uno:
Los traits permiten compartir métodos entre clases sin forzar una relación padre-hijo.
trait Logger {
public function log(string $msg): void {
echo "[LOG] $msg
";
}
}
class Servicio {
use Logger;
}
$s = new Servicio();
$s->log("Listo."); // [LOG] Listo.
Precaución: evita abusar de traits; úsalos para pequeñas utilidades reutilizables.
Los métodos mágicos son funciones especiales que PHP llama en determinados eventos:
__construct() — al crear la instancia.__destruct() — al destruir la instancia.__toString() — cuando el objeto se trata como string.__get($name) / __set($name, $value) — al acceder a propiedades inaccesibles o inexistentes.__call($name, $arguments) — llamadas a métodos no existentes en la instancia.__callStatic(...) — llamadas a métodos estáticos inexistentes.__clone() — al clonar un objeto.__sleep() / __wakeup() — para serialización.Ejemplo sencillo con __get y __toString:
class Caja {
private array $data = [];
public function __get($k) { return $this->data[$k] ?? null; }
public function __set($k, $v) { $this->data[$k] = $v; }
public function __toString(): string { return json_encode($this->data); }
}
$c = new Caja();
$c->hola = "mundo";
echo $c->hola; // mundo
echo $c; // {"hola":"mundo"}
clone $a crea una copia superficial (shallow copy). Si las propiedades incluyen objetos, ambas instancias compartirán referencias a esos objetos a menos que implementes __clone().
Ejemplo de clonación profunda (deep clone):
class Sub {
public function __construct(public array $items = []) {}
}
class Padre {
public Sub $sub;
public function __construct() {
$this->sub = new Sub();
}
public function __clone() {
// clonar el objeto contenido para no compartir la referencia
$this->sub = clone $this->sub;
}
}
$a = new Padre();
$a->sub->items[] = 1;
$b = clone $a;
$b->sub->items[] = 2;
print_r($a->sub->items); // [1]
print_r($b->sub->items); // [1,2]
<?php
// Entidad User simple
class User {
public function __construct(
public int $id,
public string $name,
public string $email
) {}
}
// Repositorio: responsable de almacenar/recuperar usuarios
class UserRepository {
/** @var array<int, User> */
private array $store = [];
public function save(User $u): void {
$this->store[$u->id] = $u;
}
public function find(int $id): ?User {
return $this->store[$id] ?? null;
}
public function all(): array {
return array_values($this->store);
}
public function delete(int $id): void {
unset($this->store[$id]);
}
}
// Uso:
$repo = new UserRepository();
$repo->save(new User(1, 'María', 'maria@example.com'));
$repo->save(new User(2, 'Luis', 'luis@example.com'));
$user = $repo->find(1);
if ($user) {
echo $user->name; // María
}
print_r($repo->all());
Explicación práctica:
UserRepository actúa como una capa de persistencia (aunque aquí sea en memoria). User (principio de responsabilidad única).class Validator {
public static function emailValido(string $email): bool {
return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}
}
try {
$email = "no-valido";
if (!Validator::emailValido($email)) {
throw new InvalidArgumentException("Email inválido: $email");
}
} catch (InvalidArgumentException $e) {
echo $e->getMessage();
}
Tip: usa excepciones para errores que no deberían ocurrir en el flujo normal y valida siempre datos de entrada.
readonly en PHP 8.1+.Producto con id, nombre, precio. Implementa descuento(float $p) que reduzca el precio en p%.Persistible con métodos save() y delete(). Haz que UserRepository implemente esta interfaz.Order que tenga una lista de Product. Implementa método total() que sume precios. Asegura que Order pueda serializarse a JSON.¿Cuándo usar una clase vs un array?
Usa una clase cuando quieras representar una entidad con comportamiento y reglas; usa arrays para datos sencillos y temporales.
¿Pueden las clases tener funciones fuera de clases?
Sí, pero mantener la lógica relacionada dentro de clases mejora la organización.
¿Debo usar siempre getters/setters en PHP?
No siempre; para DTOs simples public es aceptable. Para lógica/validación usa getters/setters.
Aprende a configurar CodeIgniter 4 con Nginx en un VPS Ubuntu 20. Guía completa para instalar, optimizar y desplegar tu aplicación web de forma segura y eficiente.
Leer másAprende todo sobre los bucles en PHP. Descubre cómo funcionan while, do while, for y foreach con ejemplos claros, además de cómo usar break y continue.
Leer másAprende a usar variables en PHP con ejemplos claros. Descubre cómo declararlas, concatenar cadenas de texto, realizar operaciones matemáticas y aplicar operadores en tus proyectos de programación web.
Leer másAprende todo sobre los arrays en PHP: qué son, cómo se crean, tipos de arrays, funciones útiles y ejemplos prácticos para programadores principiantes.
Leer másAprende los fundamentos de PHP desde cero. Descubre qué son las variables, cómo se declaran, sus tipos principales y ejemplos prácticos para comenzar a programar en PHP.
Leer másAprende a usar condicionales en PHP paso a paso. Descubre cómo funcionan if, else, elseif, switch, el operador ternario y ?? con ejemplos prácticos y buenas prácticas de programación.
Leer másExplora cómo vive Cáncer la espiritualidad. Descubre su conexión con la intuición, la energía lunar y el desarrollo interior que guía su vida espiritual
Leer másDescubre cómo es Tauro en la amistad: sus cualidades como amigo, sus desafíos y consejos para fortalecer la relación con este signo de Tierra.
Leer másDescubre cómo es Tauro en la vida espiritual: sus fortalezas, desafíos y consejos prácticos para lograr equilibrio y despertar interior.
Leer másEconomía > Emprendimiento Digital
Descubre 10 negocios digitales rentables en 2025 que puedes iniciar con poca inversión y gran potencial de crecimiento. Ideal para emprendedores que buscan independencia financiera.
Leer másDescubre con qué signos es más compatible Leo en el amor, la amistad y el trabajo. Análisis detallado de afinidades, tensiones y relaciones ideales para este signo de fuego.
Leer másDescubre qué es Tartaria, la misteriosa civilización que aparece en mapas antiguos y que muchos creen fue eliminada de la historia oficial. ¿Realidad o mito moderno?
Leer másDescubre cómo es Virgo en la amistad: su forma de relacionarse, cómo demuestra cariño, qué espera de sus amistades y con qué signos se lleva mejor. Una guía clara y completa sobre la energía social de Virgo.
Leer másDescubre cómo Aries influye en la vida espiritual: su energía, retos kármicos y el camino hacia el equilibrio interior.
Leer másDescubre las 5 tendencias tecnológicas que revolucionarán la vida cotidiana en 2025. Desde inteligencia artificial hasta realidad aumentada, conoce cómo la innovación transformará el futuro.
Leer másEconomía > Finanzas Personales
Descubre los mejores trucos psicológicos para gastar menos y ahorrar más. Estrategias simples y efectivas para mejorar tu relación con el dinero.
Leer másDescubre 7 ejercicios fáciles y efectivos que puedes hacer en casa sin necesidad de equipo. Mantente en forma y mejora tu salud desde la comodidad de tu hogar.
Leer másViajes y Turismo > Destinos y Experiencias
Descubre los 5 mejores destinos económicos para viajar en Perú este fin de año 2025. Guía completa con precios estimados, actividades recomendadas, opciones low cost y calificación para viajes solo, en pareja o con amigos. Perfecto para mochileros y viajeros de bajo presupuesto.
Leer másDescubre la compatibilidad completa de Virgo con los 12 signos del zodiaco: amor, amistad y energía zodiacal. Una guía detallada para entender cómo se relaciona Virgo con cada signo en 2025.
Leer másUna llamada de emergencia proveniente de una casa abandonada dejó perplejos a los agentes. Sin línea activa, sin electricidad y sin habitantes… ¿quién estaba llamando? Un caso real que aún genera escalofríos.
Leer másViajes y Turismo > Destinos y Experiencias
Explora 10 destinos sorprendentes para viajar en 2025. Desde aventuras exóticas hasta escapadas relajantes, descubre lugares que harán tus vacaciones inolvidables.
Leer másDescubre cómo es Cáncer en el trabajo: sus fortalezas, debilidades y la forma en que este signo zodiacal se desempeña en su vida profesional.
Leer másNo son las típicas conspiraciones. Estos 4 casos reales fueron negados durante años hasta que se confirmaron oficialmente. Historias reales que parecen ficción.
Leer másDescubre cómo influye el signo Cáncer en la salud física y emocional. Conoce sus puntos fuertes, vulnerabilidades y consejos para mantener el equilibrio y el bienestar diario
Leer másescubre cómo es Géminis como amigo: su personalidad en la amistad, fortalezas, desafíos y consejos para mantener una relación duradera con este signo.
Leer másEntretenimiento Digital > Streamers Peruanos
Descubre la historia de Zully, conocida como Zulamita, la influencer peruana que conquistó TikTok y otras redes sociales. Conoce su biografía, edad, trayectoria, polémicas y evolución hacia la música.
Leer másAprende Clases y Objetos en PHP (POO): sintaxis, propiedades, métodos, visibilidad, herencia, interfaces, traits, magic methods y ejemplos prácticos. Ideal para PHP 7/8+
Leer másExplora los hallazgos astronómicos más destacados de 2025: el nuevo satélite de Urano, un cometa interestelar, fenómenos alrededor de agujeros negros, el exoplaneta TWA 7 b, y la superestructura cósmica “Quipu”. Conoce cómo estas revelaciones transforman nuestra comprensión del universo.
Leer másEjemplos reales de teorías de conspiración que fueron consideradas absurdas o falsas, pero que después terminaron confirmándose con evidencia, documentos desclasificados o investigaciones oficiales.
Leer másEconomía > Emprendimiento Digital
Descubre 7 estrategias clave para emprender con éxito en 2025. Aprende cómo planificar, innovar y liderar tu negocio para alcanzar el crecimiento y la productividad.
Leer másEntretenimiento Digital > Streamers Peruanos
Conoce a Andy Merino, mejor conocido como Zein o ElZeein: su carrera desde YouTube hasta Kick, récords en streaming, organización de eventos y su rol como pionero del contenido digital en Perú.
Leer más