La palabra clave use
Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy. Lección 11 de 91.
Escribir la ruta completa del namespace cada vez que usas una class puede resultar tedioso. La palabra clave use te permite hacer import de una class al principio de tu archivo, para que puedas hacer referencia a ella por su nombre corto.
En lugar de escribir \Blog\User repetidamente, puedes importarlo una vez:
<?php
use Blog\User;
$user = new User("Alice");
echo $user->name;
Cuando necesitas classes de diferentes namespace con el mismo nombre, puedes crear un alias usando la palabra clave as:
<?php
use Blog\User as BlogUser;
use Shop\User as ShopUser;
$blogger = new BlogUser("Alice");
$customer = new ShopUser("alice@example.com");
echo $blogger->name . "\n";
echo $customer->email . "\n";
Salida:
Alice
alice@example.com
También puedes importar varias clases del mismo namespace mediante imports agrupados:
<?php
use Blog\{User, Post, Comment};
$user = new User("Alice");
$post = new Post("Hello World");
Punto clave: La instrucción use debe aparecer después de la declaración de namespace (si la hay) y antes de cualquier otro código. Esto hace que tu código sea más limpio y fácil de leer al eliminar las rutas de namespace repetitivas.
Desafío
FácilOrganicemos una aplicación de mensajería usando la palabra clave use para importar clases de forma clara y evitar escribir rutas completas de namespace en todas partes.
Crearás tres files que funcionan juntos:
Messaging/Email.php: Define una claseEmailen el namespaceMessaging. Debe tener una propiedadpublic $address, un constructor que accepts y sets el address, y un methodsend()que returns"Sending email to [address]".Messaging/SMS.php: Define una claseSMSen el namespaceMessaging. Debe tener una propiedadpublic $phone, un constructor que accepts y sets el phone number, y un methodsend()que returns"Sending SMS to [phone]".main.php: Include both class files, después usa la palabra claveusepara importar ambas clases. Crea unEmailobject con address"alice@example.com"y unSMSobject con phone"555-1234". Print el result de callingsend()en cada object (cada uno en su propia line).
En main.php, en lugar de escribir new \Messaging\Email(...), importarás las clases al principio con instrucciones use para poder escribir simplemente new Email(...) y new SMS(...).
Pruébalo tú mismo
<?php
// Incluye los archivos de clase
require_once 'Messaging/Email.php';
require_once 'Messaging/SMS.php';
// TODO: Usa la palabra clave 'use' para importar ambas clases del espacio de nombres Messaging
// Esto te permite escribir 'new Email(...)' en lugar de 'new \Messaging\Email(...)'
// TODO: Create an Email object with address "alice@example.com"
// TODO: Crea un objeto SMS con el teléfono "555-1234"
// TODO: Imprime el resultado de llamar a send() en cada objeto (cada uno en su propia línea)
?>Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
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 StrategyPractica por tu cuenta: Compilador de PHP online