informatica:programacion:programacion_orientada_a_objetos:php
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| informatica:programacion:programacion_orientada_a_objetos:php [2023/03/17 11:02] – [Carga automática] tempwin | informatica:programacion:programacion_orientada_a_objetos:php [2023/03/22 10:13] (actual) – [Traits (rasgos)] tempwin | ||
|---|---|---|---|
| Línea 211: | Línea 211: | ||
| </ | </ | ||
| + | La ventaja de usar '' | ||
| ===== Herencia ===== | ===== Herencia ===== | ||
| Línea 874: | Línea 875: | ||
| <WRAP center round info 60%> | <WRAP center round info 60%> | ||
| - | Las interfaces | + | Las interfaces en proyectos |
| </ | </ | ||
| Línea 887: | Línea 888: | ||
| </ | </ | ||
| - | Implementamos un par de clases: | + | Implementamos un par de clases |
| <code php> | <code php> | ||
| Línea 1203: | Línea 1204: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | <WRAP center round info 60%> | ||
| + | Si vamos a usar varios **traits** los separaríamos con comas: '' | ||
| + | </ | ||
| + | |||
| Si ahora creamos una nueva clase: | Si ahora creamos una nueva clase: | ||
| Línea 1217: | Línea 1223: | ||
| </ | </ | ||
| + | ===== La clase ReflectionClass ===== | ||
| + | |||
| + | Devuelve información sobre una clase. | ||
| + | |||
| + | <code php> | ||
| + | $reflection = new ReflectionClass(" | ||
| + | Reflexion:: | ||
| + | var_dump($reflexion-> | ||
| + | var_dump($reflexion-> | ||
| + | var_dump($reflexion-> | ||
| + | </ | ||
| + | |||
| + | ===== Constantes predefinidas ===== | ||
| + | |||
| + | * %%__%%FILE%%__%% | ||
| + | * %%__%%LINE%%__%% | ||
| + | * %%__%%CLASS%%__%% | ||
| + | * %%__%%TRAIT%%__%% | ||
| + | * %%__%%METHOD%%__%% | ||
| + | * %%__%%NAMESPACE%%__%% | ||
| + | |||
| + | <code php> | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Espacios de nombres ===== | ||
| + | |||
| + | Cuando tenemos varias clases, funciones, etc. Es común que queramos compartirlos (crear una biblioteca) y puede ocurrir que hayamos usado el mismo nombre que otras funciones o clases y al querer usarlas se produce un conflicto porque no se puede distinguir cuál es cuál. | ||
| + | |||
| + | Los espacios de nombres (// | ||
| + | |||
| + | Una analogía es el sistema de archivos de un disco duro: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | Hay dos ficheros con el mismo nombre ('' | ||
| + | |||
| + | En PHP se utilizan los espacios de nombres para la creación de bibliotecas evitando el conflicto de nombre de funciones o variables y para simplificar nombres de elementos muy largos y evitar el primer problema en el desarrollo de código reutilizable. | ||
| + | |||
| + | <WRAP center round info 60%> | ||
| + | Los espacios de nombres están disponibles en PHP desde 5.3.0 | ||
| + | </ | ||
| + | |||
| + | |||
| + | Los espacios de nombres nos permiten agrupar clases, interfaces, funciones y constantes relacionadas por lo general en una biblioteca. | ||
| + | |||
| + | ==== Creación ==== | ||
| + | |||
| + | El código que se ve afectado por el espacio de nombres son las clases, interfaces, funciones y constantes. | ||
| + | |||
| + | Se definen con la palabra reservada '' | ||
| + | |||
| + | <code php> | ||
| + | namespace Perro; | ||
| + | |||
| + | const NOMBRE = " | ||
| + | |||
| + | class MiPerro { | ||
| + | |||
| + | // Código | ||
| + | | ||
| + | public function pasearPerro() { | ||
| + | |||
| + | // Código | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Podemos crear subespacios de nombres como si de directorios se tratase: | ||
| + | |||
| + | <code php> | ||
| + | namespace Perro\salchicha; | ||
| + | |||
| + | const NOMBRE = " | ||
| + | |||
| + | class MiPerro { | ||
| + | |||
| + | // Código | ||
| + | | ||
| + | public function pasearPerro() { | ||
| + | |||
| + | // Código | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | También podemos definir varios // | ||
| + | |||
| + | <code php> | ||
| + | namespace Perro { | ||
| + | | ||
| + | const NOMBRE = " | ||
| + | class MiPerro { | ||
| + | |||
| + | // Código | ||
| + | | ||
| + | public function pasearPerro() { | ||
| + | |||
| + | // Código | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | | ||
| + | namespace Gato { | ||
| + | | ||
| + | const NOMBRE = " | ||
| + | class MiGato { | ||
| + | |||
| + | // Código | ||
| + | | ||
| + | public function pasearGato() { | ||
| + | |||
| + | // Código | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== Llamada a un espacio de nombres ==== | ||
| + | |||
| + | El manejo de los espacios de nombres es muy similar al uso de un sistema de ficheros de un disco duro: | ||
| + | |||
| + | * Llamar al archivo sin indicar ruta | ||
| + | * Llamar al archivo con una ruta relativa | ||
| + | * Llamar al archivo con una ruta absoluta | ||
| + | |||
| + | Creamos el namespace ('' | ||
| + | |||
| + | <code php> | ||
| + | namespace Animal\Perro\salchica; | ||
| + | |||
| + | const NOMBRE = " | ||
| + | |||
| + | function comer () { | ||
| + | echo "Estoy comiendo, Cinnamon"; | ||
| + | } | ||
| + | |||
| + | class Pasear { | ||
| + | static function paseo() { | ||
| + | echo "Estoy paseando, Cinnamon"; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | En otro fichero ('' | ||
| + | |||
| + | <code php> | ||
| + | namespace Animal\Perro; | ||
| + | |||
| + | include " | ||
| + | |||
| + | const NOMBRE = " | ||
| + | |||
| + | |||
| + | function comer () { | ||
| + | echo "Estoy comiendo, perro"; | ||
| + | } | ||
| + | |||
| + | class Pasear { | ||
| + | static function paseo() { | ||
| + | echo "Estoy paseando, perro"; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Si ahora hacemos lo siguiente: | ||
| + | |||
| + | <code php> | ||
| + | // Nombre no cualificado | ||
| + | comer(); | ||
| + | Pasear:: | ||
| + | echo NOMBRE; | ||
| + | </ | ||
| + | |||
| + | Se usa el del '' | ||
| + | |||
| + | Si ahora hacemos: | ||
| + | |||
| + | <code php> | ||
| + | // Nombre cualificado | ||
| + | salchicha\comer(); | ||
| + | salchicha\Pasear:: | ||
| + | echo salchicha\NOMBRE; | ||
| + | </ | ||
| + | |||
| + | Se usará el del '' | ||
| + | |||
| + | Finalmente: | ||
| + | |||
| + | <code php> | ||
| + | // Nombre completamente cualificado | ||
| + | \Animal\Perro\salchicha\comer(); | ||
| + | \Animal\Perro\salchicha\Pasear:: | ||
| + | echo \Animal\Perro\salchicha\NOMBRE; | ||
| + | </ | ||
| + | |||
| + | <WRAP center round tip 60%> | ||
| + | La constante '' | ||
| + | </ | ||
| + | |||
| + | ==== Alias con use ==== | ||
| + | |||
| + | Desde PHP 5.3.0 se ofrecen varias formas de crear alias para apodar una clase, interfaz o espacio de nombres. | ||
| + | |||
| + | Empleamos la palabra reservada '' | ||
| + | |||
| + | Por ejemplo, suponiendo que tenemos un fichero PHP con el namespace '' | ||
| + | |||
| + | <code php> | ||
| + | use Animales\Mamiferos as mascota; | ||
| + | use function Animales\Mamiferos\ladrar as ladrido; | ||
| + | use const Animales\Mamiferos\PERRO as DOG; | ||
| + | |||
| + | $perro = new mascota\Perro; | ||
| + | ladrido(); | ||
| + | echo DOG; | ||
| + | </ | ||
| + | |||
| + | ==== Espacio de nombres global ==== | ||
| + | |||
| + | Puede ocurrir que definamos una función o clase que se llame igual que una interna de PHP. Para distinguir la interna, usamos '' | ||
| + | |||
| + | <code php> | ||
| + | namespace MiNamespace\miSubNamespace; | ||
| + | |||
| + | function fopen($archivo) { | ||
| + | $f = \fopen($archivo); | ||
| + | return $f; | ||
| + | } | ||
| + | |||
| + | class Exception extends \Exception {}; | ||
| + | |||
| + | $e = new Exception(" | ||
| + | $e2 = new \Exception(" | ||
| + | </ | ||
| ===== Funciones interesantes ===== | ===== Funciones interesantes ===== | ||
| Línea 1223: | Línea 1467: | ||
| * '' | * '' | ||
| * '' | * '' | ||
| - | * '' | + | * '' |
| * '' | * '' | ||
| * '' | * '' | ||
| * '' | * '' | ||
informatica/programacion/programacion_orientada_a_objetos/php.1679047351.txt.gz · Última modificación: por tempwin
