Resumen - Proyecto organizado
Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy — lección 14 de 91.
Desafío
FácilVamos a construir una aplicación de blog completa con una organización adecuada de espacios de nombres, reuniendo todo lo que has aprendido sobre namespaces, la palabra clave use y la carga automática PSR-4.
Crearás un proyecto bien estructurado con cinco archivos que demuestran cómo las aplicaciones PHP reales organizan su código:
src/Models/Author.php— Define una claseAuthoren el espacio de nombresBlog\Models. Debe tener una propiedadpublic $name, un constructor que acepte y establezca el nombre, y un métodogetBio()que devuelva"Author: [name]".src/Models/Post.php— Define una clasePosten el espacio de nombresBlog\Models. Debe tener las propiedadespublic $titleypublic $author(donde author es un objetoAuthor). El constructor acepta un título y un objetoAuthor, estableciendo ambos. Añade un métodogetSummary()que devuelva"[title] by [author name]".src/Services/Publisher.php— Define una clasePublisheren el espacio de nombresBlog\Services. Debe tener un métodopublish(Post $post)que acepte un objetoPosty devuelva"Published: [post title]". Necesitarás importar la clasePostusando la palabra claveuseya que está en un espacio de nombres diferente.vendor/autoload.php— Crea un cargador automático PSR-4 usandospl_autoload_registerque mapee el prefijo de espacio de nombresBlog\al directoriosrc/. Este cargador automático único se encarga de cargar todas tus clases automáticamente.index.php— Tu punto de entrada. Requiere el cargador automático, luego usa la palabra claveusepara importarBlog\Models\Author,Blog\Models\PostyBlog\Services\Publisher. Crea unAuthorllamado"Jane Smith", unPostcon el título"Getting Started with PHP"usando ese autor, y unPublisher. Imprime la biografía del autor, el resumen de la publicación y el resultado de publicar el post (cada uno en su propia línea).
Observa cómo el servicio Publisher depende del modelo Post; esto demuestra cómo las clases en diferentes espacios de nombres pueden trabajar juntas importando lo que necesitan con sentencias use.
Pruébalo tú mismo
<?php
// Requerir el autoloader
require_once 'vendor/autoload.php';
// TODO: Importar las clases necesarias utilizando sentencias 'use'
// - Blog\Models\Author
// - Blog\Models\Post
// - Blog\Services\Publisher
// TODO: Crear un Autor llamado "Jane Smith"
// TODO: Crear una Publicación con el título "Getting Started with PHP" usando ese autor
// TODO: Crear un Publicador
// TODO: Imprimir la biografía del autor
// TODO: Imprimir el resumen de la publicación
// TODO: Imprimir el resultado de publicar la publicación
?>Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosIntroducción a OOPClases vs ObjetosLa palabra clave $thisMétodosPropiedadesConstructor (__construct)Destructor (__destruct)Resumen - Calculadora simple4Herencia
Herencia básicaLa palabra clave parent::Sobrescritura de métodosLa palabra clave finalClases abstractasResumen - Jerarquía de empleados7Encapsulamiento
Público, Protegido, PrivadoModificadores de acceso a fondoGetters y SettersOcultamiento de informaciónPromoción de constructor (8.0)Resumen - Sistema de registros de estudiantes10Conceptos avanzados de POO
Composición vs. HerenciaInyección de dependenciasClases anónimasEnums (PHP 8.1)Fibers (PHP 8.1)Clonación de objetos a fondoGeneradores e Iteradores13Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Repository2Espacios de nombres y Autoloading
Introducción a los espacios de nombresLa palabra clave useEstándar de Autoloading PSR-4Autoloader de ComposerResumen - Proyecto organizado5Interfaces y Contratos
Introducción a las InterfacesImplementación de InterfacesImplementación de Múltiples InterfacesInterfaz vs Clase AbstractaType Hinting con InterfacesResumen - Calculadora de Formas8Métodos mágicos
Introducción a los métodos mágicos__toString y __debugInfo__get, __set, __isset, __unset__call y __callStatic__clone y clonación de objetos__serialize y __unserializeResumen - Colección personalizada3Propiedades de clase
Propiedades de instancia vs. estáticasConstantes en clasesMétodos y propiedades estáticosPropiedades privadas y protegidasPropiedades de solo lectura (PHP 8.1)Resumen - Gestor de cuenta bancaria6Polimorfismo
Sobrescritura de métodos revisadaPolimorfismo mediante interfacesType Hinting y tipos de uniónEnlace estático tardíoResumen - Procesador de pagos9Traits
Introducción a los TraitsUso de múltiples TraitsResolución de conflictos de TraitsMétodos abstractos en TraitsTraits frente a herencia12Patrones de diseño Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy