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 espacio de nombres cada vez que usas una clase puede resultar tedioso. La palabra clave use te permite importar una clase 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 necesites clases de distintos espacios de nombres 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 espacio de nombres mediante importaciones agrupadas:
<?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. Hace que tu código sea más limpio y fácil de leer al eliminar las rutas de espacio de nombres 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 espacios de nombres en todas partes.
Crearás tres archivos que funcionan conjuntamente:
Messaging/Email.php: Define una claseEmailen el espacio de nombresMessaging. Debe tener una propiedadpublic $address, un constructor que acepte y establezca la dirección, y un métodosend()que devuelva"Sending email to [address]".Messaging/SMS.php: Define una claseSMSen el espacio de nombresMessaging. Debe tener una propiedadpublic $phone, un constructor que acepte y establezca el número de teléfono, y un métodosend()que devuelva"Sending SMS to [phone]".main.php: Incluye ambos archivos de clase y, después, usa la palabra claveusepara importar ambas clases. Crea un objetoEmailcon la dirección"alice@example.com"y un objetoSMScon el teléfono"555-1234". Imprime el resultado de llamar asend()en cada objeto (cada uno en su propia línea).
En main.php, en lugar de escribir new \Messaging\Email(...), importarás las clases al principio mediante 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 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