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 en la parte superior de tu archivo, para que puedas referenciarla 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 diferentes espacios de nombres con el mismo nombre, puedes crear un alias utilizando 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 múltiples clases desde el mismo espacio de nombres utilizando importaciones agrupadas:
<?php
use Blog\{User, Post, Comment};
$user = new User("Alice");
$post = new Post("Hello World");
Punto clave: La sentencia use debe aparecer después de la declaración namespace (si la hay) y antes de cualquier otro código. Hace que su código sea más limpio y fácil de leer al eliminar rutas de espacios de nombres repetitivas.
Desafío
FácilVamos a organizar una aplicación de mensajería utilizando la palabra clave use para importar clases de forma limpia y evitar escribir rutas de espacio de nombres completas en todas partes.
Crearás tres archivos que funcionan juntos:
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, luego 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 en la parte superior con sentencias use para que puedas escribir simplemente new Email(...) y new SMS(...).
Hoja de referencia
La palabra clave use importa una clase en la parte superior de tu archivo, permitiéndote referenciarla por su nombre corto en lugar de la ruta completa del espacio de nombres:
<?php
use Blog\User;
$user = new User("Alice");
Cuando clases de diferentes espacios de nombres comparten el mismo nombre, crea un alias utilizando 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");
Importa múltiples clases desde el mismo espacio de nombres utilizando importaciones agrupadas:
<?php
use Blog\{User, Post, Comment};
$user = new User("Alice");
$post = new Post("Hello World");
La sentencia use debe aparecer después de la declaración namespace (si existe) y antes de cualquier otro código.
Pruébalo tú mismo
<?php
// Incluir los archivos de clase
require_once 'Messaging/Email.php';
require_once 'Messaging/SMS.php';
// TODO: Usar la palabra clave 'use' para importar ambas clases desde el espacio de nombres Messaging
// Esto te permite escribir 'new Email(...)' en lugar de 'new \Messaging\Email(...)'
// TODO: Crear un objeto Email con la dirección "alice@example.com"
// TODO: Crear un objeto SMS con el teléfono "555-1234"
// TODO: Imprimir 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 Strategy