Está en la página 1de 6

MENU

MENU 

Array Access en PHP – Parte 1


 Duilio
 Duilio Palacios
Palacios  06/04/2017
 06/04/2017

 Videotutorial
 Videotutorial  00 Comentarios
 Comentarios

 Curso: Curso de programación orientada a objetos con PHP

 

Con PHP, es posible interactuar con un objeto como si éste fuese un array, y esto
lo podemos lograr de forma muy sencilla implementando la interfaz
ArrayAccess . A partir de esta lección aprenderás cómo usar esta interfaz de
forma detallada, para agregar esta funcionalidad a la clase Model que hemos
venido usando. Además vamos a aplicar los conocimientos de la lección 27
(Desarrollo de clases y métodos con pruebas automatizadas) para crear esta
funcionalidad con el apoyo de una prueba unitaria escrita en PHPUnit.

08:09

Repositorio
 Ver el código de esta lección en GitHub

Si cometes un error en el código, cuando ejecutes la prueba es posible que no lo


veas, y esto no es lo más óptimo para depurar y corregir errores. Así que puedes
solucionar esto agregando este archivo bootstrap.php en la raíz de tu proyecto y
haciendo referencia a éste desde el archivo phpunit.xml. De esta forma podrás ver
los errores que arroje PHP (en caso de que exista alguno) directamente desde tu
terminal.

Notas
Por Clemir Rondón.

Las correcciones que debes hacer en la lección Desarrollo de clases y métodos


con pruebas automatizadas son:

Agregar el archivo phpunit.xml, el cual es el archivo de configuración que


permite definir que acciones se realizarán al ejecutar las pruebas.
Además, puedes configurar tu entorno de desarrollo para crear un alias del
comando de la ejecución de las pruebas: Alias de comandos para la consola
Windows/Linux/Mac

Por otro lado,  ArrayAccess es una interfaz predefinida de PHP como


Iterator e IteratorAgreggate que vimos en la lección Iteración de
objetos en PHP, la cual nos permite dar acceso a objetos como si fuesen arrays.

Para trabajar con ArrayAccess la clase debe implementar dicha interfaz,


como por ejemplo:

class User implements ArrayAccess {

Sin embargo, como toda interfaz es un contrato, tenemos que además


implementar cuatro métodos que nos permitirán simular trabajar con objetos
usando la sintaxis de array:

abstract public boolean offsetExists ( mixed $offset ) que


se ejecutará cuando queremos comprobar si existe un índice.

abstract public mixed offsetGet ( mixed $offset ) que nos


permitirá recuperar el valor de una clave o $offset.

abstract public void offsetSet ( mixed $offset , mixed


$value )
para asignar una clave $offset con valor $value al objeto.
abstract public void offsetUnset ( mixed $offset ) que
destruye un $offset o clave.

Para crear una nueva prueba usando PHPUnit, creamos un nuevo archivo con
nombre ArrayAccessTest.php dentro del directorio test

 Revisa cómo configurar PHPUnit en un proyecto de PHP con la


lección: Desarrollo de clases y métodos con pruebas automatizadas

Además, crea la clase llamada ArrayAccessTest sin olvidar extender de la


clase  PHPUnit\Framework\TestCase que nos proporciona los métodos
para escribir las pruebas.

Al ser la clase Model una clase abstracta no la podemos instanciar


directamente, es por ello que para probar el uso de la interfaz ArrayAccess
creamos una clase UserTest que extienda de la clase Model , la cual si
podemos instanciar en la prueba.

 Para repasar sobre clases abstractas consulta la lección Herencia y


abstracción con PHP

Puesto que el método offsetGet a implementar nos permite obtener el valor


de una propiedad, en ese método debemos colocar la manera con el objeto
permite acceder a una propiedad de forma dinámica y esto es a través del método
getAttribute visto en las lecciones: Uso de los métodos mágicos __get,
__set, __isset y __unset con PHP y Llamadas dinámicas a métodos con PHP

Laravel, como framework de PHP, implementa la interfaz ArrayAccess en


algunas de sus clases para acceder a las propiedad como si fuese un array como
por ejemplo: Illuminate\Http\Request , y es por ello que para poder
acceder a las variables de la petición de esta manera $request['name'] que
es equivalente a $request->input('name') o $request->name .  Otras
clases que implementan la interfaz son
Illuminate\Database\Eloquent\Model ,
Illuminate\Support\Collection , 
Illuminate\Container\Container ,  etc.

Material relacionado
Curso básico de Terminal
Desarrollo de clases y métodos con pruebas automatizadas
Iteración de objetos en PHP
Llamadas dinámicas a métodos con PHP

Únete a nuestra comunidad en Discord y comparte con los usuarios y


autores de Styde, 100% gratis.

ÚNETE HOY 

 Lección anterior
Desarrollo de clases y métodos con pruebas automatizadas

Lección siguiente 
Array Access en PHP - Parte 2

MARCAR COMO COMPLETADO

Publicado por: Duilio Palacios


Programador y profesor de PHP y Laravel. Creador de Styde.net.

https://twitter.com/sileence/

   

 Array Access Oop PHP


ALSO ON STYDE.NET

Relaciones entre Instalación y


tablas de bases de … configuración de … Curso de
hace 2 años • 1 comentario hace un año • 2 comentarios hace 10 me

Uno de los aspectos En esta lección instalaremos En este cu


fundamentales de las bases iTerm con oh my zsh, el cómo desa
de datos relacionales son … tema … pequeña a

0 Comentarios 
1 Acceder

Sé el primero en comentar...

INICIAR SESIÓN CON


O REGISTRARSE CON DISQUS ?

Nombre

Ordenar por los más nuevos  1 ⥅

Sé el primero en comentar.

✉ Suscríbete 🔒 Privacy ⚠ Do Not Sell My Data

Suscríbete a nuestro
boletín
Te enviaremos publicaciones con
consejos útiles y múltiples recursos
para que sigas aprendiendo.

Correo electronico
Nombre

SUSCRÍBETE

     

En Styde nos dedicamos a enseñarte tecnologías actuales de desarrollo web para ayudarte
a crear tus proyectos de una forma más eficiente.

Ver Planes • Series y cursos • Ver últimas lecciones


Contacto • Términos de uso • Privacidad

© 2022 Derechos Reservados - Styde Limited

También podría gustarte