Aprender a diseñar tus propios tipos de datos en PHP marca una diferencia esencial en cualquier proyecto profesional. Estrategias claras y ordenadas aportan robustez y eficiencia al desarrollo, permitiéndote gestionar mejor la información. La creación de clases define estructuras reutilizables, mejorando el control sobre los datos.
¿Qué es una clase en PHP y cómo funciona?
Una clase en PHP es un molde que permite crear tu propio tipo de dato. Tal como indica la palabra reservada class, cada clase contiene propiedades específicas que requieren ciertos tipos de información. Por ejemplo, en un curso, puedes definir un título, subtítulo, descripción y etiquetas.
Al definir una clase, se establece la estructura básica que todos sus objetos deberán seguir. Las propiedades se especifican claramente desde el inicio y se asignan valores mediante un constructor:
Crear un objeto es simplemente seguir la estructura establecida por la clase. Al instanciar el objeto, debes respetar el orden de los elementos para mantener la integridad y coherencia del dato:
$cursoPHP=newCurso('Curso Profesional de PHP y Laravel','Crea aplicaciones con PHP','Curso enfocado en el desarrollo de aplicaciones web usando Laravel.',['php','laravel']);
Cada instancia mantiene la estructura y propiedades definidas en su clase. PHP maneja esta información mediante sintaxis específicas para objetos, que permiten acceder a sus propiedades de forma directa utilizando flechas (->):
echo$cursoPHP->titulo;// imprime el título
¿Por qué utilizar clases en tu proyecto PHP?
Implementar clases aporta profesionalismo y claridad a tus proyectos. Te permite encapsular datos y comportamientos, facilitando el mantenimiento, la legibilidad y escalabilidad en tus desarrollos. Además, brinda certeza y orden a la información:
Evita errores al definir claramente qué datos pueden utilizarse.
Facilita el mantenimiento del código gracias a estructuras organizadas.
Permite visualizar fácilmente el propósito de cada dato sin necesidad de revisar constantemente la clase original.
¿Cómo avanzar aplicando este conocimiento?
Una buena práctica sería que intentes crear ahora mismo otra clase, por ejemplo, Autor. Define propiedades adecuadas y luego crea diferentes objetos. Muestra los objetos en pantalla y verifica que todo funcione correctamente. Así, estarás consolidando tus conocimientos en la creación y manejo de clases en PHP.
Si realizas este ejercicio o tienes dudas, ¡comparte tu código y experiencia en los comentarios!
<?php
classAutor{publicfunction__construct(public string $nombre,public string $app,public string $apm,public string $edad,public string $carrera,public array $cursos){}}$autor =newAutor(nombre:'Emmanuel Garcia Roldan',app:'Garcia',apm:'Roldan',edad:'35',carrera:'Ing en Sistemas',cursos:['Backend PHP','laravel','introduccion a android ']);classCurso{publicfunction__construct(public string $titulo,public string $subtitulo,public string $descripcion,public string $costo,public array $etiqueta,public array $etiqueta2){}}$curso=newCurso(titulo:'Apilcaciones en android',subtitulo:'introduccion al desarrollo de apk',descripcion:'inicio en android studio',costo:'Gratis',etiqueta:["PHP","Laravel","Javascript","css","angular"],etiqueta2:["mysql","SQL","MongoDb"]);?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title><?= $curso->titulo ?></title></head><body><h2>Bienvenido a el <?=$curso->titulo?></h2><h4><?= $curso -> subtitulo?></h4><h4><?= $curso -> descripcion?></h4><h3>Costo:<?= $curso -> costo ?></h3><strong>Etiquetas</strong><ul><?php
foreach($curso -> etiqueta as $etiquetas):?><li><?= $etiquetas ?></li><?php endforeach;?></ul><strong>Cursos relacionados</strong><ul><?php
foreach($curso ->etiqueta2 as $etiquetas2):?><li><?= $etiquetas2 ?></li><?php endforeach;?></ul><h2>Nombre del autor:<?= $autor -> nombre." ".$autor->app." ".$autor->apm?></h2><h3>Edad:<?= $autor ->edad?></h3><h3>Carrera:<?= $autor -> carrera?></h3><h4>Cursos que da
<?php
foreach($autor -> cursos as $cursoDa):?><li><?=$cursoDa?></li><?php endforeach;?></h4></body></html>```\<?phpclass Autor{publicfunction \_\_construct(public string $nombre,public string $app,public string $apm,public string $edad,public string $carrera,public array $cursos){}}$autor =newAutor( nombre:'Emmanuel Garcia Roldan', app:'Garcia', apm:'Roldan', edad:'35', carrera:'Ing en Sistemas', cursos: \['Backend PHP','laravel','introduccion a android ']);classCurso{publicfunction \_\_construct(public string $titulo,public string $subtitulo,public string $descripcion,public string $costo,public array $etiqueta,public array $etiqueta2){}}$curso=newCurso( titulo:'Apilcaciones en android', subtitulo:'introduccion al desarrollo de apk', descripcion:'inicio en android studio', costo:'Gratis', etiqueta: \["PHP","Laravel","Javascript","css","angular"], etiqueta2:\["mysql","SQL","MongoDb"]);?>\<!DOCTYPE html>\<html lang="en">\<head> \<meta charset="UTF-8"> \<meta name="viewport" content="width=device-width, initial-scale=1.0"> \<title>\<?= $curso->titulo ?>\</title>\</head>\<body> \<h2>Bienvenido a el \<?=$curso->titulo?>\</h2> \<h4>\<?= $curso -> subtitulo?>\</h4> \<h4>\<?= $curso -> descripcion?>\</h4> \<h3>Costo: \<?= $curso -> costo ?>\</h3> \<strong>Etiquetas\</strong> \<ul> \<?php foreach($curso -> etiqueta as $etiquetas):?> \<li>\<?= $etiquetas ?>\</li> \<?php endforeach;?> \</ul> \<strong>Cursos relacionados\</strong> \<ul> \<?php foreach($curso ->etiqueta2 as $etiquetas2):?> \<li>\<?= $etiquetas2 ?>\</li> \<?php endforeach;?> \</ul> \<h2>Nombre del autor:\<?= $autor -> nombre." ".$autor->app." ".$autor->apm?>\</h2> \<h3>Edad:\<?= $autor ->edad?>\</h3> \<h3>Carrera: \<?= $autor -> carrera?>\</h3> \<h4>Cursos que da
\<?php foreach($autor -> cursos as $cursoDa):?> \<li>\<?=$cursoDa?>\</li> \<?php endforeach;?> \</h4>\</body>\</html>
Ojo al dato, esta clase es super importante clase y objetos. 🏆
La segunda forma de definir la clase se llama promocion automatica.
La manera de trabajar las clases y el contructor que se muestra en esta clase, la forma "nueva", desde cuando está vigente en php?
Es por esto que varios frameworks cambiaron al formato de argumentos cuando se crean las clases y constructores?
Me parece mucho mas claro asi.
<?php
classAuthor{// Constructor y propiedadespublicfunction__construct(public string $genero,public string $nombre,public string $fechaNacimiento,public array $peliculas){}// Método para calcular la edad del autorpublicfunctionedad(): int { $fechaNacimiento =newDateTime($this->fechaNacimiento); $fechaActual =newDateTime();return $fechaActual->diff($fechaNacimiento)->y;}// Método para contar la cantidad de películaspublicfunctiontotalPeliculas(): int {returncount($this->peliculas);}}?><?php
// Crear autores del género horror$king =newAuthor(genero:"Horror",nombre:"Stephen King",fechaNacimiento:"1947-09-21",peliculas:["Carrie","El resplandor","Misery","It"]);$carpenter =newAuthor(genero:"Horror",nombre:"John Carpenter",fechaNacimiento:"1945-01-16",peliculas:["Halloween","The Fog","Escape from New York","Big Trouble in Little China"]);?><!DOCTYPE html><html lang="es"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Autores de Horror:StephenKing y JohnCarpenter</title></head><body><h2>Maestros del género <?= $king->genero ?></h2><section><h3>Información del Autor</h3><p><strong>Nombre:</strong><?= $king->nombre ?></p><p><strong>Fecha de Nacimiento:</strong><?= $king->fechaNacimiento ?></p><p><strong>Edad:</strong><?= $king->edad()?> años</p><p><strong>Total de Películas:</strong><?= $king->totalPeliculas()?></p><ul><?php foreach($king->peliculas as $pelicula):?><li><?= $pelicula ?></li><?php endforeach;?></ul></section><hr><section><h3>Información del Autor</h3><p><strong>Nombre:</strong><?= $carpenter->nombre ?></p><p><strong>Fecha de Nacimiento:</strong><?= $carpenter->fechaNacimiento ?></p><p><strong>Edad:</strong><?= $carpenter->edad()?> años</p><p><strong>Total de Películas:</strong><?= $carpenter->totalPeliculas()?></p><ul><?php foreach($carpenter->peliculas as $pelicula):?><li><?= $pelicula ?></li><?php endforeach;?></ul></section></body></html>
Me gusta como enseña la forma antigua de como construir clases algo lento y repetitivo a la forma mas reciente, un proceso mas rápido.
<?php
$course =["title"=>"Curso profesional de PHP y Laravel","subtitle"=>"Aprende PHP y Laravel desde cero","description"=> "Lorem ipsum dolor sit, amet consectetur adipisicing elit.Omnis atque, explicabo repudiandae sint quisquam, eveniet perferendis mollitia dignissimos rerum eum sunt nobis
repellat numquam iste.Quaerat porro facilis voluptatem cupiditate.","tags"=>["PHP","Laravel","JavaScript","HTML","CSS","MySQL"]];$lessons =["Gestión de Rutas de Aplicación"=>"Creación y configuración de rutas en Laravel.","Manejo de Bases de Datos con Eloquent ORM"=> "Introducción al ORMEloquent para interactuar con bases de datos.Creación y gestión de modelos en Laravel.","Validación de Formularios"=>"Implementación de validaciones de datos de entrada.","Creación de Controladores y Vistas"=> "Desarrollo de controladores para manejar la lógica de la aplicación.Uso de Blade para crear vistas dinámicas."
];classAutor{publicfunction__construct(public string $name,public string $country,public array $courses){}};$instructor =newAutor(name:"Arthur King",country:"Mexico",courses:["PHP","JavaScript","HTML","CSS","MySQL"])?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title><?= $course["title"]?></title></head><body><h1>Bienvenido al <?= $course["title"]?></h1><h2><?= $course["subtitle"]?></h2><p><?= $course["description"]?></p><p><strong>Etiquetas:</strong><ul><?php foreach($course["tags"]as $tag):?><li><?= $tag ?></li><?php endforeach;?></ul></p><p><strong>Lecciones del curso:</strong><ul><?php foreach($lessons as$key=> $value):?><li><strong><?= $key ?>:</strong><?= $value ?></li><?php endforeach;?></ul></p><p><strong>Autor del curso:</strong><br><strong>Nombre:</strong><?= $instructor->name;?><br><strong>Pais:</strong><?= $instructor->country;?><br><strong>Cursos:</strong><ul><?php foreach($instructor->courses as $course):?><li><?= $course ?></li><?php endforeach ?></ul></p></body></html>
<?php
class Course {
public function __construct(
public string $title,
public string $subtitle,
public string $description,
public array $tags
)
{
}
}
$course = new Course(
title:'Curso Profesional de PHP y Laravel',
subtitle:'Crea aplicaciones con PHP',
description:'Curso enfocado en el desarrollo de aplicaciones web usando Laravel.',
<?php foreach ($autores->categoria as $categoria) {
echo "<li>$categoria</li>";
}
?>
</ul>
</p>
</body>
</html>
se empieza a parecer a java orientado a objetos jeje
Ejercicio:
<?php
//ESTA ES SINTAXIS ANTIGUA
/*class Course
{
public $title;
public $subtitle;
public $description;
public $tags;
public function __construct($title, $subtitle, $description, $tags)
{
$this->title = $title;
$this->subtitle = $subtitle;
$this->description = $description;
$this->tags = $tags;
}
}
$course = new Course(
'Curso Profesional de PHP y Laravel',
'Aprende PHP y LARAVEL desde cero',
'Lorem ipsum dolor sit amet consectetur adipisicing elit. Maiores quibusdam unde modi incidunt. Voluptatem tenetur aliquam, expedita vitae libero vel ullam sequi aspernatur, ad cum unde et voluptates consequuntur dolorem!',
['Curso de HTML', 'Curso de PYTHON', 'Curso de LARAVEL', 'Curso de GITHUB'],
);*/
class Course
{
public function __construct(
public string $title,
public string $subtitle,
public string $description,
public array $tags
) {
// Aqui construimos el codigo
}
}
$course = new Course(
title: 'Curso Profesional de PHP y Laravel',
subtitle: 'Aprende PHP y LARAVEL desde cero',
description: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Maiores quibusdam unde modi incidunt. Voluptatem tenetur aliquam, expedita vitae libero vel ullam sequi aspernatur, ad cum unde et voluptates consequuntur dolorem!',
tags: ['Curso de HTML', 'Curso de PYTHON', 'Curso de LARAVEL', 'Curso de GITHUB']
);
class Autor
{
public function __construct(
public string $nombre,
public string $apellido,
public string $email,
public string $pais,
public string $biografia,
public array $redesSociales = ['twiter', 'facebook', 'github'],
<h1>Bienvenido al <?= $autor->title ?> que cuesta <?php echo $precio;?> y se impartira <?php echo $fecha; ?></h1>
<h2><?= $autor->subtitle ?> </h2>
<p><?= $autor->description?></p>
<p>
<strong>ETIQUETAS :</strong>
<ul>
<?php foreach ($autor->nombres as $nombre): ?>
<li><?= $nombre ?></li>
<?php endforeach; ?>
</ul>
</p>
</body>
<?php
class Course {
public function __construct (
public string $title,
public string $subtitle,
public string $description,
public array $tags)
{
}
}
$course = new Course (
title:'Curso profesional de PHP y Laravel',
subtitle:'Aprende PHP y Laravel desde cero',
description:'Lorem ipsum dolor sit amet',
tags:['PHP','Laravel','JavaScript','HTML','CSS','MySQL'],
);
class Autor {
public function __construct
(
public string $nombre,
public array $cursos,
)
{
//code here
}
}
$autor = new Autor(
nombre:'Brandon Alvarado',
cursos:['Fundamentos de programación','Como programar en PHP','Introducción a HTML5','Python y la automatización de procesos']
);
?><!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title><?= $course->title ?></title></head><body><h1>Bienvenido al <?= $course->title ?></h1><h2><?= $course->subtitle ?></h2><p><?= $course->description ?></p><p><strong> Etiquetas </strong><ul><?php foreach ($course->tags as $tag):?><li><?=$tag ?></li><?php endforeach;?></ul></p><h2>Autor: <?= $autor->nombre?></h2><p><strong>Cursos:</strong><ul><?php foreach ($autor->cursos as $curso):?><li><?= $curso ?></li><?php endforeach;?></ul></p></body></html>
["nombre" => "Curso de JavaScript", "nivel" => "básico"],
["nombre" => "Curso de Python", "nivel" => "intermedio"],
["nombre" => "Curso de Ruby", "nivel" => "avanzado"]
],
"Lecciones" => [
["titulo" => "Introducción a PHP", "duracion" => 5],
["titulo" => "Variables y Tipos de Datos", "duracion" => 7],
["titulo" => "Estructuras de Control", "duracion" => 8],
["titulo" => "Funciones y Arreglos", "duracion" => 10]
]
];
si estuviera el boton de like le daria infinitamente no sabia esa forma de llenar un constructor es mucho mas amigable y legible me encanto aprendi bastante en esta clase de fundamentos
Reto completado:
<?php
class Course {
public function __construct(
public string $title,
public string $subtitle,
public string $description,
public array $tags = []
) {
}
}
$course = new Course(
title: 'Curso de PHP',
subtitle: 'Aprende PHP desde cero',
description: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, voluptatibus.',
descripcion: 'Programador especializado en Laravel, autor de libros técnicos y profesor de programación con más de una década de experiencia. He trabajado en proyectos reales y formo a la nueva generación de desarrolladores que busca escribir código limpio, pensar como arquitectos de software y construir productos sólidos desde cero.'