Repaso: 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ácilConstruyamos una aplicación de blog completa con una organización adecuada de espacios de nombres, reuniendo todo lo que has aprendido sobre los espacios de nombres, 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, y establece 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]". Tendrás que importar la clasePostmediante la palabra claveuse, ya que se encuentra en un espacio de nombres diferente.vendor/autoload.php: Crea un cargador automático PSR-4 usandospl_autoload_registerque asigne el prefijo del espacio de nombresBlog\al directoriosrc/. Este único cargador automático se encarga de cargar todas tus clases automáticamente.index.php: Tu punto de entrada. Requiere el cargador automático y, después, 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 la publicación (cada uno en su propia línea).
Observa cómo el servicio Publisher depende del modelo Post. Esto demuestra cómo las clases de distintos espacios de nombres pueden trabajar juntas importando lo que necesitan mediante instrucciones use.
Pruébalo tú mismo
<?php
// Requiere el autoloader
require_once 'vendor/autoload.php';
// TODO: Importa las clases necesarias usando declaraciones 'use'
// - Blog\Models\Author
// - Blog\Models\Post
// - Blog\Services\Publisher
// TODO: Crea un Author llamado "Jane Smith"
// TODO: Create a Post with title "Getting Started with PHP" using that author
// TODO: Crea un Publisher
// TODO: Imprime la bio del autor
// TODO: Imprime el resumen del post
// TODO: Imprime el resultado de publicar el post
?>Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de la POO
Archivos externosIntroducción a la POOClases frente a objetosLa palabra clave $thisMétodosPropiedadesConstructor (__construct)Destructor (__destruct)Repaso: calculadora simple4Herencia
Herencia básicaLa palabra clave parent::Sobrescritura de métodosLa palabra clave finalClases abstractasRepaso - Jerarquía de empleados7Encapsulación
Público, protegido, privadoModificadores de acceso en profundidadGetters y settersOcultación de la informaciónPromoción del constructor (8.0)Repaso: sistema de registros de estudiantes10Conceptos avanzados de OOP
Composición vs. herenciaInyección de dependenciasClases anónimasEnums (PHP 8.1)Fibras (PHP 8.1)Análisis profundo de la clonación de objetosGeneradores e iteradores13Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Repository2Namespaces y carga automática
Introducción a los NamespacesLa palabra clave useEstándar de carga automática PSR-4Autoloader de ComposerRepaso: proyecto organizado5Interfaces y contratos
Introducción a las interfacesImplementación de interfacesImplementación de múltiples interfacesInterfaces vs. clase abstractaTipado con interfacesRepaso - 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 __unserializeRepaso: 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)Repaso: gestor de cuentas bancarias6Polimorfismo
Repaso de la sobrescritura de métodosPolimorfismo mediante interfacesAnotaciones de tipo y tipos uniónEnlace estático tardíoRepaso: procesador de pagos9Traits
Introducción a los TraitsUso de múltiples TraitsResolución de conflictos entre TraitsMétodos abstractos en TraitsTraits frente a la herencia12Patrones de diseño, parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón StrategyPractica por tu cuenta: Compilador de PHP online