Documentos de Académico
Documentos de Profesional
Documentos de Cultura
libro electrónico
www.wowebook.org
PHP 7 Programación Cookbook
Doug Bierer
BIRMINGHAM - Bombay
Todos los derechos reservados. Ninguna parte de esta publicación puede ser reproducida, almacenada en un sistema de
recuperación o transmitida en cualquier forma o por cualquier medio, sin la previa autorización por escrito del editor, excepto en el
caso de citas breves incorporados en artículos de revistas. Cada esfuerzo se ha hecho en la preparación de este libro para
asegurar la exactitud de la información presentada. Sin embargo, la información contenida en este libro se vende sin garantía, ya
sea expresa o implícita. Ni el autor, ni Packt Publishing, y sus concesionarios y distribuidores serán responsables por cualquier
daño causado o presuntamente causado directa o indirectamente por este libro.
Packt Publishing se ha esforzado para proporcionar información sobre marcas registradas acerca de todas las compañías y productos
mencionados en este libro por el uso apropiado de capitales. Sin embargo, Packt Publishing no puede garantizar la exactitud de esta
información.
ISBN 978-1-78588-344-6
www.packtpub.com
[FM-2]
Vincenzo Provenza
indexador
Kunal Parikh
Coordinador de produccion
Kirk D'Costa
trabajo portada
Editor técnico
Madhunikita Sunil Chindarkar
Editor de copia
safis Edición
[FM-3]
Con PHP 7, obtenemos una serie de nuevas características y mejoras, como el árbol de sintaxis abstracta, errores arrojadizos,
consejos de tipo escalar, tipo de retorno declaraciones, mejoras en la velocidad, y mucho más.
La pregunta que se hacen los desarrolladores de PHP en estos días no es "¿Debo usar las nuevas características?", Sino "¿Cómo
implementar estas características para construir mejores aplicaciones más rápido?" Recuerdo la creación de aplicaciones en PHP 4. Fue
una época más simple para desarrolladores de PHP, ya que podría ser entremezclado con HTML y todo estaba en un archivo. En lugar
de los marcos, tuvimos bibliotecas de funciones que se incluía. Aplicaciones eran básicamente sólo las aplicaciones de escritorio CRUD
desarrollo de aplicaciones ha cambiado varias veces desde entonces. Nuevos marcos, como AJAX, PHPUnit, compositor y
API-En primer lugar, se introdujeron.
Todas estas cosas, y muchos otros, han influido en la forma en PHP los desarrolladores a crear aplicaciones. Hoy en día, se le rió sin
trabajo si tiene una aplicación basada en paginado que mezclaba HTML y PHP. ¿Entonces que vas a hacer? ¿Cómo va a construir
aplicaciones PHP modernas y APIs? ¿Cómo va a aprovechar todas las nuevas herramientas que PHP da a construir, mejores
aplicaciones rápido, más fuerte? Estoy tan bueno que lo preguntas.
Mi amigo Doug Bierer tiene la respuesta para usted. Esto no es YAUT (Sin embargo, otro Tomé inútil) de información que va a poner
en un estante y nunca utilizar. El libro que tiene en sus manos está destinado a, rápidamente, ser una parte de su cinta adhesiva biblioteca.
(Cada desarrollador tiene una cinta adhesiva
biblioteca. Se compone de esos libros que usted se refiere con tanta frecuencia que ahora se mantienen unidos por
cinta adhesiva.)
Doug se toma el tiempo para mostrarle las nuevas características que usted necesita para comprender, al igual que muchos libros de
desarrolladores por ahí. Cuando este libro es diferente es que el autor toma el tiempo para mostrar cómo resolver problemas del mundo real
utilizando estas nuevas herramientas. No sólo se aprende, pero se puede solucionar de inmediato los problemas con lo que se aprende.
[FM-5]
Cal Evans
PHP nómada
Herder empollón para la World Wide Herd
[FM-6]
Doug Bierer se ha enganchado en los ordenadores desde su primer programa, escrito en Dartmouth BASIC en un DEC
PDP-8, en 1971. En su amplio carrera, este autor ha sido un programador contrato profesional desde 1978, después de
haber escrito aplicaciones en BASIC, PL / yo, ensamblador, adelante, C, C ++, dBase / Foxbase / Clipper, Pascal, Perl,
Java y PHP. Se desplegó su primera página web en 1993 mientras vivía en San Francisco. Habla cuatro idiomas, ha
viajado mucho y ha vivido en los EE.UU., Francia, Holanda, Inglaterra, Suecia, Escocia, y Tailandia. También pasó
algunos años como administrador de sistemas Linux y redes TCP / IP. Él es también un músico consumado (que ha
escrito más de 60 canciones), así como un escritor, bajo el seudónimo de Douglas Alan.
propia compañía de Doug es unlikelysource.com, que se especializa en consultoría, programación PHP, desarrollo de sitios web,
y la formación (sobre todo para Zend Technologies Ltd y Rogue Wave Software Inc.
En primer lugar, me gustaría dedicar este libro a mi madre, Betty Bierer, quien falleció en mayo de
2016. Ella me animó toda mi vida, y aplaudió mis logros (no importa lo malo!). Ella asistió a todos
mis conciertos de música, compró todos mis CDs y leer todos los libros (aunque no las entendía).
También me gustaría agradecer a mi sufrida esposa, Siri, que pacientemente soportó las horas
que me llevó a escribir este libro sin queja. (Ella, sin embargo, hacer amenazas si yo estaba de
acuerdo para asumir otro ... las negociaciones están en curso.) Por último, me gustaría dar las
gracias a una serie de notables en la comunidad PHP que me permitió compartir ideas o
inspiración les ofreció. Estos incluyen, Matthew Weir O'Phinney, Cal Evans, Daryl madera, Susie
Pollock, Salvatore Pappalardo, Slavey Karadzhov, y Clark Everetts.
[FM-7]
Salvatore Pappalardo, un friki de la tecnología desde su nacimiento, ha sido un ingeniero de software desde 2002. El ama "desde cero"
desarrollo. Él es un amante de la tecnología, lector de ciencia ficción, entusiasta de la película, y un TED Talks adicto.
Vincenzo Provenza es un desarrollador web con más de 5 años de experiencia con diferentes tecnologías y lenguajes
de programación (principalmente PHP y JavaScript). Le encanta viajar y leer.
[FM-8]
a la versión de libro electrónico en www.PacktPub.com y como un cliente de impresión de libros, usted tiene derecho a un descuento en la copia de
customercare@packtpub.com para más detalles. A www.PacktPub.com, también se puede leer una colección de artículos
técnicos gratuitos, crea para una serie de boletines gratuitos y recibe descuentos y ofertas exclusivas en los libros y libros
electrónicos Packt.
https://www2.packtpub.com/books/subscription/packtlib
¿Necesita soluciones inmediatas a sus preguntas de TI? PacktLib es la biblioteca de libros digitales en línea Packt. Aquí, usted
puede buscar, acceder y leer toda la biblioteca de los libros de Packt.
[FM-9]
yo
iii
iv
Capítulo 2, Uso de PHP 7 Alta Características de rendimiento, toma una inmersión profunda en las nuevas características de la lengua.
Se le presentó a los conceptos del árbol de sintaxis abstracta y la sintaxis de la variable uniforme, entre otros, y aprenderá cómo
estos pueden afectar a la programación del día a día. Esto es seguido por las recetas que se aprovechan de las mejoras de
rendimiento PHP 7, incluyendo nuevos cambios significativos en el para cada() manejo bucle.
Capítulo 3, Trabajando con PHP programación funcional, hace hincapié en la forma en PHP siempre ha tenido la capacidad de trabajar
con bibliotecas definidas por el programador de funciones en lugar de clases, y PHP 7 no es una excepción. En este capítulo, vamos a
echar un vistazo más de cerca a las mejoras en el manejo de funciones, incluyendo la capacidad de proporcionar "consejos de tipo" que
implica tipos de datos básicos, tales como entero, flotante, booleano, y la cadena para la entrada y salida. También proporcionaremos
una amplia cobertura de los iteradores de la biblioteca estándar de PHP, así como la forma de escribir sus propios iteradores tomando
ventaja de un mejor manejo de los generadores.
Capítulo 4, Trabajando con PHP Programación orientada a objetos, explora los conceptos básicos de programación PHP orientado a objetos.
conseguir rápidamente más allá de los fundamentos, usted aprenderá cómo utilizar los espacios de nombres de PHP y rasgos. consideraciones
arquitectónicas serán cubiertos, incluyendo la mejor manera de utilizar interfaces. Por último, una nueva e interesante función de PHP 7, clases
anónimas, se discutirá junto con ejemplos prácticos de su uso.
Capítulo 5, Interactuar con una Base de datos, explora la posibilidad de tener su aplicación leer y escribir en una base de datos, que es
una parte crítica de cualquier sitio web moderno. Lo que es ampliamente entendido mal, sin embargo, es el uso correcto de la
extensión PHP Data Objects (PDO). En este capítulo se presentará una cobertura completa de la DOP, que a su vez permitirá a sus
aplicaciones para interactuar con la mayoría de las bases de datos importantes, como MySQL, Oracle, PostgreSQL, IBM DB2 y
Microsoft SQL Server, sin tener que aprender cualquier otro conjunto de comandos. Además, vamos a cubrir las técnicas avanzadas,
tales como el trabajo con entidades del modelo de dominio, realizar búsquedas secundarias integradas, y la implementación de las
búsquedas de jQuery DataTable utilizando PHP 7.
Capítulo 6, edificio escalable sitios web, profundiza en uno de los clásicos problemas que enfrentan los desarrolladores de PHP construcción de
sitios web interactiva formularios HTML-hardcoding y luego tener que realizar tareas de mantenimiento. Un enfoque orientado a objetos
ordenado y eficiente se presenta en este capítulo, que, con una cantidad mínima de código, le permite generar formularios HTML enteras que
se puede cambiar fácilmente en la configuración inicial. Otro problema igualmente desconcertante es cómo filtrar y validar los datos enviados
desde un formulario. En este capítulo, aprenderá cómo desarrollar un filtrado y validación de fábrica fácilmente configurable, que luego se
pueden aplicar a cualquier dato de entrada de correos.
Capítulo 7, Acceso a Internet Servicios, abarca algo que se está volviendo cada vez más importante para el desarrollo de la web
capacidad de publicar o consumir servicios web. Este capítulo trata sobre los dos enfoques fundamentales: en SOAP y REST. Usted
aprenderá cómo implementar SOAP y REST servidores y clientes. Adicionalmente, en las recetas que se presentan utilizan el patrón
de diseño de adaptador, que permite un alto grado de personalización, lo que significa que no están encerrados en un paradigma de
diseño específico.
Capítulo 8, Trabajando con Fecha / Hora y Aspectos internacionales, le ayuda a hacer frente a la feroz competencia debido al
crecimiento de la World Wide Web (WWW), lo que lleva a más y más clientes que buscan expandir sus negocios en los
mercados internacionales. En este capítulo se le dará al día en todos los aspectos de la internacionalización, incluyendo el
uso de emoticonos, personajes complejos y traducción. Adicionalmente, se le mostrará cómo adquirir y manejar la información
regional, incluyendo la configuración de idioma, el número y formato de moneda, así como la fecha y la hora. Además,
cubriremos recetas que muestran cómo crear calendarios internacionalizadas, que puede manejar eventos recurrentes.
Capítulo 9, Desarrollando middleware, trata el tema más candente en la comunidad de código abierto en este momento middleware.
Como su nombre indica, el middleware es un software que puede ser roto en su lugar, lo que añade valor a una aplicación existente
sin tener que modificar el código fuente de la aplicación. En este capítulo, se le mostrará una serie de recetas, implementado como
PSR-7-compatible middleware (ver Apéndice, Definir PSR-7 clases, para más detalles), que realizan la autenticación, control de
acceso, el almacenamiento en caché, y de enrutamiento.
vi
Capítulo 10, Mirando a Avanzado algoritmos, le ayuda a comprender que, como desarrollador, dado el enorme número de
programadores y compañías que compiten por el mismo negocio, es extremadamente importante que adquiera el dominio de
algoritmos avanzados clave. En este capítulo, el uso de PHP 7, aprenderá la teoría y aplicación de los captadores y
definidores, listas enlazadas, pilas tipo de burbujas, y la búsqueda binaria. Además, este capítulo examina cómo utilizar estas
técnicas para implementar un motor de búsqueda, y cómo manejar matrices multidimensionales.
Capítulo 11, La implementación de patrones de diseño de software, funciona en un aspecto importante de la programación orientada
a objetos, es decir, una comprensión de los patrones de diseño clave de software. Sin este conocimiento, al solicitar una nueva
posición o el intento de atraer a nuevos clientes, que, como desarrollador, estará en una grave desventaja. Este capítulo trata sobre
varios patrones de importancia crítica, incluyendo hidratación, Estrategia, Mapper, Object Relational Mapping, y Pub / Sub.
Capítulo 12, La mejora de web Seguridad, aborda cuestiones que surgen de la naturaleza penetrante de la Internet hoy en día. Vemos
ataques cibernéticos están lanzando cada vez con mayor frecuencia, a menudo con la pérdida financiera y personal devastadora.
En este capítulo, vamos a presentar recetas prácticas sólidas que, de aplicarse, darán a sus sitios web un impulso exponencial en
términos de seguridad y protección. Los temas cubiertos incluyen el filtrado y validación, la protección de la sesión, presentación del
formulario seguro, la generación de contraseñas seguras, y el uso de letras cifradas. Además, una receta se presenta que le
mostrará cómo cifrar y descifrar los datos sin necesidad de utilizar la extensión PHP mcrypt, que está en desuso en PHP 7.1 (y en
última instancia será removido de la lengua).
Capítulo 13, mejor Prácticas, pruebas y depuración, cubre las mejores prácticas y la depuración de su código para producir un
código bien escrito que funciona. En este capítulo, también aprenderá cómo configurar y crear pruebas unitarias, controlar errores
y excepciones inesperadas, y generar datos de prueba. Se presentan varias nuevas características de PHP 7, incluyendo la
forma en PHP 7 puede "tirar" errores. Es importante observar que mejor prácticas Se identifican en todo el libro, no sólo en este
capítulo!
Apéndice, Definir PSR-7 clases, direcciones aceptadas recientemente Normas PHP Recomendación 7, que define
interfaces utilizadas en conjunción con middleware. En este apéndice, se le mostrará implementaciones sólidas del
PSR-7 clases que incluyen objetos de valor, tales como URI, el cuerpo y la carga de archivos, así como objetos de
petición y respuesta.
vii
secciones
En este libro, se encuentran varias partidas que aparecen con frecuencia (Preparación, Cómo se hace, cómo funciona, Hay
más, y ver también).
Para dar instrucciones claras sobre cómo completar una receta, utilizamos estas secciones de la siguiente manera:
preparándose
Esta sección le indica lo que debe esperar en la receta, y describe cómo configurar ningún software o cualquier configuración
preliminares necesarios para la receta.
Cómo hacerlo…
Cómo funciona…
Esta sección normalmente consiste en una explicación detallada de lo sucedido en la sección anterior.
Hay más…
Esta sección consta de información adicional sobre la receta con el fin de hacer que el lector más
conocedores de la receta.
Ver también
Esta sección proporciona enlaces útiles a otra información útil para la receta.
viii
convenciones
En este libro, encontrará una serie de estilos de texto que distinguen entre diferentes tipos de información. Estos son algunos ejemplos
de estos estilos y una explicación de su significado. Las palabras de código en el texto, nombres de tabla de base de datos, nombres de
carpeta, nombres de archivo, extensiones de archivo, nombres de ruta, URL ficticias, la entrada del usuario, y las manijas de Twitter se
muestran como sigue: "Por último, tomar la clase LotsProps se define en el tercer punto y colocarlo en un archivo separado,
chap_10_oop_using_getters_and_setters_magic_call.php ".
si (file_exists ($ archivo)) {
archivo $ require_once; return
TRUE; }
falso retorno; }
Cuando deseamos llamar su atención sobre una parte específica de un bloque de código, las líneas o los artículos pertinentes se establecen en
negrita:
$ Params = [
'Db' => __DIR__. '/../data/db/php7cookbook.db.sqlite'];
localhost: 8080
Los nuevos términos y Palabras importantes se muestran en negrita. Palabras que se ven en la pantalla, por ejemplo, en los
menús y cuadros de diálogo, aparecen en el texto así: "Cuando el Las compras
se hace clic en el botón, la información de compra inicial aparece ".
ix
Los comentarios de nuestros lectores es siempre bienvenido. Háganos saber lo que piensa de este libro, lo que gustó o no.
comentarios de los lectores es importante para nosotros, ya que nos ayuda a desarrollar títulos que usted realmente va a obtener el
máximo provecho de. Para enviar comentarios generales, simplemente por e-mail feedback@packtpub.com, y mencione el título del libro
Si hay un tema que tiene experiencia en y usted está interesado en cualquiera de escritura o contribuir a
un libro, ver nuestra guía de Autor www.packtpub.com/authors.
Atención al cliente
Ahora que usted es el orgulloso propietario de un libro Packt, tenemos una serie de cosas para ayudarle a obtener el máximo provecho de
su compra.
Puede descargar los archivos de código de ejemplo para este libro de su cuenta al http: // www. packtpub.com. Si ha adquirido este libro
otra parte, se puede visitar http: //www.packtpub. es / support y registrarse para tener los archivos enviados por correo electrónico
directamente a usted. Puede descargar los archivos de código siguiendo estos pasos:
1. Inicie sesión o regístrese en nuestro sitio web utilizando su dirección de correo electrónico y la contraseña.
También puede descargar los archivos de código haciendo clic en el Los archivos de código botón en la página web del libro en la
página web de Packt Publishing. Esta página se puede acceder introduciendo el nombre del libro en el Buscar caja. Tenga en cuenta
que necesita estar conectado a su cuenta de Packt.
Una vez descargado el archivo, por favor asegúrese de que descomprimir o extraer la carpeta utilizando la última versión de:
F Uso de las utilidades de Linux o 7-Zip / PeaZip El paquete de código para el libro también está alojado
en GitHub en https://github.com/ Packt Publishing / PHP-7-Programación-libro de cocina. También tenemos otros
paquetes de código de nuestro rico catálogo de libros y videos disponibles en https://github.com/ Packt Publishing
/. Comprobar a cabo!
Errata
Aunque hemos tomado todas las precauciones para asegurar la exactitud de nuestro contenido, los errores ocurren. Si encuentra
un error en uno de nuestros libros, tal vez un error en el texto o el código-estaríamos agradecidos si pudiera informar de esto a
nosotros. Al hacerlo, puede ahorrar otros lectores de la frustración y ayudar a mejorar las versiones posteriores de este libro. Si
encuentra alguna errata, por favor informe al visitar http://www.packtpub.com/submit-errata, la selección de su libro, hacer clic en el Formulario
de Presentación de erratas enlace, e introducir los detalles de su fe de erratas. Una vez que su fe de erratas se verifican, su
presentación será aceptado y la fe de erratas se cargará en nuestra página web o añadir a cualquier fe de erratas existentes en la
sección de erratas de ese título. Para ver la fe de erratas presentada anteriormente, vaya a https://www.packtpub.com/books/
contenido / soporte y escriba el nombre del libro en el campo de búsqueda. La información requerida aparecerá bajo el Errata sección.
Piratería
La piratería de material con copyright en Internet es un problema constante en todos los medios. En Packt, tomamos la protección de nuestros
derechos de autor y licencias muy en serio. Si se encuentra con todas las copias ilegales de nuestros trabajos en cualquier forma en Internet,
por favor nos proporcione la dirección de ubicación o el nombre del sitio web inmediatamente para que podamos presentar un recurso. Por
favor, póngase en contacto con nosotros en copyright@packtpub.com con un enlace a la sospecha de material pirateado.
Apreciamos su ayuda en la protección de nuestros autores y nuestra capacidad para lograr que el contenido valioso.
xi
preguntas
Si usted tiene un problema con cualquier aspecto de este libro, puede ponerse en contacto con nosotros en preguntas @ packtpub.com, y
xii
F Instalación de PHPUnit
Introducción
En este capítulo se ha diseñado como una Inicio rápido que les permite conocer y que se ejecuta en PHP 7 para que pueda
empezar a aplicar las recetas de inmediato. La suposición subyacente de este libro es que usted ya tiene un buen conocimiento de
PHP y programación. Aunque este libro no va a entrar en detalles sobre la instalación real de PHP, ya que PHP 7 es relativamente
nuevo, vamos a hacer todo lo posible para señalar las peculiaridades y trampas que pueden surgir durante la instalación de PHP 7.
F Instalación de un paquete * AMP (es decir, XAMPP, WAMP, LAMP, MAMP, y así sucesivamente)
Cómo hacerlo…
Los tres métodos se enumeran en orden de dificultad. Sin embargo, el primer enfoque, aunque tedioso, le dará
el control más finita sobre extensiones y opciones.
libre que ha demostrado ser popular. Se basa en el Colección de compiladores de GNU (GCC) compilador proporcionada por el ÑU proyecto.
compiladores no libres incluyen el clásico Turbo C compilador de Borland, y, por supuesto, el compilador que es preferido por los
desarrolladores de Windows es Estudio visual. Este último, sin embargo, está diseñado principalmente para el desarrollo de C ++, por lo
que cuando se compila PHP, tendrá que especificar el modo C. Cuando se trabaja en un Apple Mac, la mejor solución es instalar el Herramientas
de Desarrollo de Apple.
Se puede utilizar el Xcode IDE compilar PHP 7, o correr gcc desde una ventana de terminal. En un entorno Linux, desde una
ventana de terminal, ejecute gcc.
Al compilar desde una línea de comandos de la ventana o terminal, el procedimiento normal es el siguiente:
F configurar
F hacer
F realizar la prueba
F make install
Para obtener información sobre las opciones de configuración (es decir, cuando se ejecuta configurar), utilizar el ayuda
opción:
configure --help
Los errores que pueden surgir durante la fase de configuración se mencionan en la siguiente tabla:
Error Fijar
configurar: No se ha encontrado xml2config: Sólo tiene que instalar libxml2. Por este error, consulte el
error. Por favor, compruebe la instalación siguiente enlace:
libxml2
http://superuser.com/ preguntas / 740399 /
cómo-a-fix-phpinstallation-cuando-xml2-config-IsMissing
Error Fijar
configurar: ADVERTENCIA: no No es un gran trato. Estas opciones son valores por defecto y no necesitan
reconocido opciones: ser incluidos. Para más detalles, consulte el siguiente enlace:
- - enable-spl, --enablereflection,
--con-libxml
http://jcutrer.com/howto/linux/howto-compile-php7-on-ubuntu-14-04
PHP 7 código fuente y ha puesto a disposición. En el caso de Windows, vaya a http://windows.php.net/. Va a encontrar un buen conjunto de
consejos en la columna de la izquierda que se refieren a la versión para elegir, a salvo de amenazas versus de no lectura segura,
Etcétera. A continuación, puede hacer clic en descargas y buscar el archivo ZIP que se aplica a su entorno. Una vez que
el archivo ZIP se ha descargado, extraer los archivos en la carpeta de su elección, añadir php.exe a su ruta, y configurar
PHP 7 utilizando el php.ini archivo. Para instalar los binarios pre-compilados en un sistema Mac OS X, lo mejor es incluir
un sistema de gestión de paquetes. Las recomendadas para PHP incluyen los siguientes:
F MacPorts
F Liip
F Soplón
F homebrew
En el caso de Linux, el sistema de envasado utilizado depende de la distribución de Linux que esté utilizando. La
siguiente tabla, organizado por la distribución de Linux, resume dónde buscar el paquete PHP 7.
Sináptica.
Fedora / Red Hat paquetes admin.fedoraproject.org/pkgdb/ Asegúrese de que usted es el usuario root:
Do
repos-source.zend.com/zendserver/early-access/php7/php7*RHEL*
Utilice este comando:
php7 YaST -i
Como alternativa, puede ejecutar
gráfica.
AMPERIO se refiere a Apache, MySQL, y PHP ( además Perl y Pitón). El * se refiere a Linux, Windows, Mac, y así sucesivamente
(es decir, LAMP, WAMP, MAMP y). Este enfoque es a menudo el más fácil, pero le da menos control sobre la instalación inicial
de PHP. Por otra parte, siempre se puede modificar el php.ini archivar e instalar extensiones adicionales para personalizar la
instalación según sea necesario. La siguiente tabla resume una serie de paquetes populares * AMP:
MAMP www.mamp.info/en Y WM
En la tabla anterior, hemos contratado los paquetes * * AMP, donde se sustituye por W para ventanas, METRO para Mac
OS X, y L para Linux.
Hay más…
Cuando se instala un binario pre-compilado a partir de un paquete, sólo se núcleo se instalan las extensiones. extensiones PHP no
esenciales deben instalarse por separado.
Vale la pena señalar que la instalación de PHP 7 en plataformas de computación en nube menudo seguirá el procedimiento de
instalación descrito para los binarios pre-compilados. Averiguar si su entorno de nube usa Linux, Mac o Windows máquinas
virtuales, y luego siga el procedimiento adecuado como se menciona en esta receta.
Es posible que PHP 7 aún no ha alcanzado su repositorio favorito para binarios pre-compilados. Siempre se puede instalar desde el
código fuente, o considerar la instalación de uno de los paquetes de AMP * (ver la siguiente sección). Una alternativa para los sistemas
basados en Linux es utilizar el Personal Archivo Paquete
( PPA) enfoque. Debido a que las APP no han sido sometidos a un riguroso proceso de selección, sin embargo, la
seguridad puede ser una preocupación. Una buena discusión sobre las consideraciones de seguridad para las APP se
encuentra en http://askubuntu.com/questions/35629/are-ppas-safe-to-add-to-mysystem-and-what-are-some-red-flags-to-watch-out-fo.
Ver también
Consideraciones generales de instalación, así como las instrucciones para cada una de las tres principales plataformas de sistemas
operativos (Windows, Mac OS X, y Linux), se pueden encontrar en http://php.net/manual/en/ install.general.php.
Las instrucciones sobre cómo compilar un programa en C utilizando Visual Studio se pueden encontrar en
https://msdn.microsoft.com/en-us/library/bb384838.
Otra posible forma de probar PHP 7 es mediante el uso de una máquina virtual. Aquí hay un par de herramientas con sus enlaces, que
pueden resultar útiles:
Cómo hacerlo…
1. Para activar el servidor web PHP, primero cambie al directorio que servirá como la base para su código.
2. A continuación, deberá suministrar el nombre de host o la dirección IP y, opcionalmente, un puerto. Aquí hay un ejemplo que puede
3. Como el servidor web integrado sigue solicitudes de servicio, también podrá ver la información de acceso, códigos
de estado HTTP, y solicitar información.
4. Si es necesario configurar la raíz de documentos del servidor web a un directorio distinto al actual, se puede utilizar el
- t bandera. La bandera debe entonces ser seguida por una ruta de directorio válido. El servidor web integrado tratará a
este directorio como si fuera la raíz de documentos web, que es útil por razones de seguridad. Por razones de
seguridad, algunos marcos, como Zend Framework, requiere que la raíz de documentos web es diferente de donde
reside el código fuente real. Aquí hay un ejemplo usando el - t bandera:
Para propósitos de prueba, junto con el código fuente para el libro, hemos proporcionado un archivo SQL con datos de
ejemplo en https://github.com/dbierer/php7cookbook. El nombre de la base de datos utilizada en las recetas de este libro es php7cookbook.
Cómo hacerlo…
1. Definir una base de datos MySQL, php7cookbook. También asignar derechos a la nueva base de datos
a un usuario llamado cocinar con la contraseña libro. La siguiente tabla resume estos valores:
ít. notas
CREAR BASE DE DATOS SI NO EXISTE nombredb DEFAULT CHARACTER SET utf8 COLLATE
utf8_general_ci;
CREATE USER 'usuario' @ '%' identificado con mysql_native_password; Contraseña establecida para
'usuario' @ '%' = PASSWORD ( 'userPassword'); Conceder a todos los privilegios en nombredb * a
'usuario' @ '%'.; Conceder a todos los privilegios en nombredb * a 'usuario' @ 'localhost'.; FLUSH
PRIVILEGES;
3. Importar los valores de la muestra en la nueva base de datos. El archivo de importación, php7cookbook.
sql, se encuentra en https://github.com/dbierer/php7cookbook/blob/ maestro / php7cookbook.sql.
Instalación de PHPUnit
Prueba de la unidad es posiblemente el medio más popular de código de prueba PHP. La mayoría de los desarrolladores estarán de acuerdo en
que un conjunto sólido de pruebas es un requisito para cualquier proyecto desarrollado adecuadamente. En realidad pocos desarrolladores
escriben estas pruebas. Unos pocos afortunados tienen un grupo de prueba independiente que escribe las pruebas para ellos! Después de meses
de escaramuzas con el grupo de prueba, sin embargo, los restos de los pocos afortunados tienden a quejarse y quejarse. En cualquier caso, todos
los libros sobre PHP no estaría completa sin al menos un movimiento de cabeza y un guiño hacia las pruebas. El lugar para encontrar la última
versión del PHPUnit es https://phpunit.de/. PHPUnit5.1 y por encima de PHP soporte 7. Haga clic en el enlace de la versión deseada, y va a descargar
una phpunit.phar archivo. A continuación, puede ejecutar comandos utilizando el archivo, de la siguiente manera:
En el desarrollo de PHP utilizando una programación orientada a objetos (POO) enfoque, la recomendación es colocar cada
clase en su propio archivo. La ventaja de seguir esta recomendación es la facilidad de mantenimiento a largo plazo y mejorar
la legibilidad. La desventaja es que cada archivo de definición de la clase debe ser incluido (es decir, el uso de incluir o sus
variantes). Para abordar esta cuestión, hay un mecanismo incorporado en el lenguaje PHP que se
preparándose
El requisito mínimo para la carga automática de PHP es definir un mundial __ autocarga () función. Esto es un magia función
llamada automáticamente por el motor de PHP cuando se solicita una clase, pero en la que dicha clase no se ha incluido. El
nombre de la clase solicitada aparecerá como un parámetro cuando __ autocarga () se invoca (suponiendo que ha definido él!). Si
está utilizando espacios de nombres de PHP, se pasará el nombre de espacio de nombres completo de la clase. Porque __
autocarga () es un función, debe estar en el espacio de nombres global; Sin embargo, hay limitaciones en su uso. En
consecuencia, en esta receta, vamos a hacer uso de la spl_autoload_register ()
función, lo que nos da más flexibilidad.
Cómo hacerlo…
1. La clase vamos a cubrir en esta receta es Aplicación \ carga automática \ Loader. En orden
para tomar ventaja de la relación entre los espacios de nombres de PHP y de carga automática, nombramos el
archivo Loader.php y colocarlo en el directorio / ruta / a / libro de cocina / archivos / Aplicación / carga automática carpeta.
2. El primer método que presentaremos simplemente carga un archivo. Usamos El archivo existe() a
comprobar antes de ejecutar requerir una vez(). La razón de esto es que si no se encuentra el archivo, requerir una vez() generará
un error grave que no puede ser capturado con nuevas capacidades de manejo de error de PHP de 7:
si (file_exists ($ archivo)) {
archivo $ require_once; return
TRUE; }
falso retorno; }
3. A continuación, podemos probar el valor de retorno de cargar archivo() en el programa de llamada y el bucle
a través de una lista de directorios alternativos antes de lanzar una Excepción si es en última instancia, no puede cargar el
archivo.
Usted se dará cuenta de que los métodos y propiedades de esta clase son estáticos. Esto nos da
mayor flexibilidad al registrar el método de carga automática, y también nos permite tratar a la Cargador
como una clase Semifallo.
4. A continuación, se define el método que llama cargar archivo() y en realidad realiza la lógica
para localizar el archivo basado en el nombre de clase de espacio de nombres. Este método se deriva un nombre de
archivo mediante la conversión del espacio de nombres de PHP separador \ en el separador de directorios adecuada a
este servidor y anexas. php: autoLoad función pública estática (clase $) {
$ Éxito = false;
$ Fn = str_replace ( '\\', DIRECTORY_SEPARATOR, clase $)
. '.php';
foreach (self :: $ directorios como $ comenzar) {
$ File = $ inicio. DIRECTORY_SEPARATOR. $ Fn; si (self :: loadFile ($
archivo)) {
$ Éxito = TRUE; descanso;
}}
if (! $ éxito) {
if (! self :: loadFile (__ DIR__
. DIRECTORY_SEPARATOR. $ Fn)) {throw new \
Excepción (
self :: UNABLE_TO_LOAD. ''. clase $); }}
devolver $ éxito; }
5. A continuación, el método de bucle a través de una serie de directorios que llamamos self :: $ directorios, utilizando
cada directorio como un punto de partida para el nombre de archivo derivada. Si no tiene éxito, como último
recurso, el método intenta cargar el archivo desde el directorio actual. Si aún no es exitosa, una Excepción es
aventado.
6. A continuación, tenemos un método que puede añadir más directorios a nuestra lista de directorios para poner a prueba. Observe que si
el valor proporcionado es una matriz, array_merge () se utiliza. De lo contrario, simplemente se añade la cadena de directorio a la self :: $
dirs formación:
if ($ is_array (directorios)) {
self :: $ dirs = array_merge (self :: $, $ directorios directorios); } Else {
10
7. A continuación, llegamos a la parte más importante; tenemos que dejar constancia de nuestra autocarga ()
método como una Biblioteca estándar de PHP (SPL) cargador automático. Esto se logra utilizando
spl_autoload_register () con el en eso() método:
if ($) {directorios
self :: $ addDirs (directorios); }
si (self :: $ == registrada 0) {
spl_autoload_register (__ class__ ':: carga automática'.); self :: $ registrada ++; }}
8. En este punto, podemos definir __ construir(), que llama self :: init (dirs $).
Esto nos permite crear también una instancia de Cargador Si es deseado:
Cómo funciona…
Con el fin de utilizar la clase cargador automático que acabamos de definir, que tendrá que requerir Loader. php. Si los archivos de
espacio de nombres se encuentran en un directorio distinto al actual, también debe ejecutar Cargador :: init () y el suministro de rutas
de directorios adicionales.
Con el fin de asegurarse de que funciona el cargador automático, también necesitaremos una clase de prueba. He aquí una definición de
/path/to/cookbook/files/Application/Test/TestClass.php:
<? Php
espacio de nombres de programa \ prueba;
TestClass clase {
volver __METHOD__; }}
11
Ahora crear una muestra chap_01_autoload_test.php archivo de código para probar el cargador automático:
<? Php
requerir __DIR__. '/../Application/Autoload/Loader.php'; Aplicación \ carga automática \
cargador :: init (__ DIR__ '/ ..'.);
Por último, trate de obtener una falso clase que no existe. Tenga en cuenta que esto generará un error:
Cómo hacerlo…
1. En primer lugar, tenemos que agarrar el contenido del sitio web de destino. A primera vista parece que deberíamos
hacer una solicitud cURL, o simplemente utilizar file_get_contents ().
El problema con estos enfoques es que vamos a llegar a tener que hacer una gran cantidad de manipulación
de cadenas, lo más probable tener que hacer uso excesivo de la expresión regular temida. Para evitar todo
esto, vamos a simplemente tomar ventaja de una clase PHP 7 ya existente DOMDocument. Así se crea una DOMDocument
if (! $ this-> content) {
(si stripos ($ url, 'http') == 0) {
$ Url = 'http: //'. $ Url; }
12
Tenga en cuenta que preceden a la llamada a la loadHTMLFile () método con un @. Esto no se hace para
ocultar la mala codificación (!) Al igual que a menudo el caso en PHP 5! Más bien, el @ suprime los avisos
generados cuando el analizador encuentra HTML mal escrito. Presumiblemente, podríamos capturar los
avisos y registrarlos, capaces de dar nuestra Aspiradora clase una capacidad de diagnóstico también.
2. A continuación, tenemos que extraer las etiquetas que son de interés. Usamos el
getElementsByTagName () Método para este propósito. Si deseamos extraer
todas etiquetas, podemos suministrar * como argumento:
$ recuento = 0;
$ Resultado = array ();
$ Elementos = $ this-> getContent ($ url)
- > getElementsByTagName ($ tag);
foreach ($ elementos como $ nodo) {
$ Resultado [$ count] [ 'valor'] = trim (
preg_replace ( '/ \ s + /', '', $ node-> nodeValue)); if ($ nódulo-> hasAttributes
()) {
foreach ($ node-> atributos como el nombre $ => $ attr) {
$ Contar ++; }
return $ resultado; }
3. También podría ser de interés para extraer ciertos atributos en lugar de las etiquetas. De acuerdo con ello, definimos otro
método para este propósito. En este caso, tenemos que analizar a través de todas las etiquetas y el uso getAttribute (). Se dará
cuenta de que hay un parámetro para el dominio DNS. Hemos añadido esto con el fin de mantener la exploración dentro del
mismo dominio (si usted está construyendo un árbol web, por ejemplo):
13
return $ resultado; }
Cómo funciona…
Para utilizar el nuevo Aspiradora clase, inicializar el cargador automático (descrito anteriormente) y crear una instancia de la Aspiradora
clase. A continuación, puede ejecutar el Hoover :: getTags () Método para producir una serie de etiquetas desde la URL que
especifique como argumento. Aquí es un bloque de código de chap_01_vacuuming_website.php que utiliza el Aspiradora
<? Php
// modificar según sea necesario
14
Ver también
Para obtener más información sobre DOM, consulte la página de referencia en PHP http://php.net/manual/ es /
class.domdocument.php.
A veces es necesario para escanear una página web, pero ir un nivel más profundo. Por ejemplo, usted quiere construir un diagrama de árbol
web de un sitio web. Esto se puede lograr mediante la búsqueda de todos los < A> las etiquetas y después de la HREF atribuye a la siguiente
página web. Una vez que haya adquirido las páginas secundarias, a continuación, puede continuar con el escaneado con el fin de completar el
árbol.
15
Cómo hacerlo…
1. Un componente central de un escáner web profunda es una condición básica Aspiradora clase, como se describe
previamente. El procedimiento básico que se presenta en esta receta es para explorar el sitio web de destino y la
aspiradora todo el HREF atributos. Para este fin, se define una Aplicación \ Web \ Profundo clase. Añadimos una propiedad
que representa el dominio DNS:
protected $ dominio;
2. A continuación, se define un método que Hoover las etiquetas para cada sitio web representada en la lista de exploración. Con
el fin de evitar que el escáner de la pesca de arrastre de la totalidad Red mundial (WWW), hemos limitado la exploración al
dominio de destino. La razón por la cual de rendimiento a partir se ha agregado es porque necesitamos para producir toda la
matriz producida por
Hoover :: getTags (). los de rendimiento a partir la sintaxis nos permite tratar la matriz como un sub-generador:
3. Con el fin de mantener dentro del mismo dominio, necesitamos un método que devolverá el dominio de
la URL. Usamos la práctica parse_url () funcionar para este propósito:
if (! $ this-> dominio) {
dieciséis
Cómo funciona…
En primer lugar, seguir adelante y definir el Aplicación \ Web \ Profundo clase definida anteriormente, así como la Aplicación \
Web \ Hoover clase definida en la receta anterior. A continuación, definir un bloque de código de chap_01_deep_scan_website.php que
<? Php
// modificar según sea necesario
En este punto, se puede recuperar URL y etiquetar la información de parámetros de URL. El PHP 7 se unen nula operador es útil
para establecer los valores de retorno:
Ver también
Para obtener más información sobre los generadores y de rendimiento a partir, consulte el artículo en
http://php.net/manual/en/language.generators.syntax.php.
17
preparándose
F Agrega comentarios con // ADVERTENCIA donde se han producido cambios en el uso del lenguaje,
pero donde una re-escritura no es posible
Tenga en cuenta que después de ejecutar el convertidor, su código es no garantizado para trabajar en PHP 7.
Usted todavía tendrá que revisar la // ADVERTENCIA etiquetas añadidas. Al menos, esta receta le dará una
buena ventaja de convertir su código PHP 5 para trabajar en PHP 7.
El núcleo de esta receta es la nueva PHP 7 preg_replace_callback_array () función. Lo que este sorprendente función le permite hacer
es presentar una serie de expresiones regulares como llaves, con el valor que representa una devolución de llamada
independiente. A continuación, puede pasar la cadena a través de una serie de transformaciones. No sólo eso, el tema de la serie
de devoluciones de llamada puede
sí mismo ser una matriz.
Cómo hacerlo…
1. En una nueva clase Aplicación \ Analizar \ Convert, comenzamos con una escanear() método, que acepta un nombre de
archivo como un argumento. Se comprueba si existe el archivo. Si es así, se llama al PHP archivo() función, que carga el
archivo en una matriz, con cada elemento de la matriz que representa una línea:
if (! file_exists ($ archivo)) {
arrojar nueva Excepción (
self :: EXCEPTION_FILE_NOT_EXISTS); }
$ Resultado = preg_replace_callback_array ([
18
2. A continuación, empezar a pasar una serie de pares clave / valor. La clave es una expresión regular, que se procesa en contra de
la cadena. Cualquier coincidencia se pasan a la devolución de llamada, que se representa como la parte del valor del par
clave / valor. Comprobamos para las etiquetas de apertura y cierre que se han eliminado de PHP 7:
// reemplazar sin el apoyo de más largo etiqueta de cierre '! \% \>!' =>
función (coincidencia $) {
retorno '?>'; },
3. A continuación hay una serie de advertencias cuando se detectan ciertas operaciones y existe un potencial código-ruptura
entre cómo se manejan en PHP 5 frente a PHP 7. En todos estos casos, el código no es re-escrito. En cambio, un
comentario en línea con la palabra ADVERTENCIA
está agregado:
función (coincidencia $) {
retorno '// ADVERTENCIA: la interpolación de variables
. 'Ahora se produce de izquierda a derecha'. PHP_EOL
. '// ver: http://php.net/manual/en/'
. '// migration70.incompatible.php'
. $ Partido [0];
},
// cambios en cómo se maneja la lista () operador de! (. *?) lista (\ s *?)? \ (! '=>
función (coincidencia $) {
retorno '// ADVERTENCIA: se han realizado cambios'
. 'En la lista () manejo del operador.
. A ver: http://php.net/manual/en/ '
. 'Migration70.incompatible.php'
. $ Partido [0];
19
},
// session_set_save_handler (xxx)
'! (. *?) Session_set_save_handler (\ s *?)? \ ((. *?) \)!' =>
función (coincidencia $) {
if (isset ($ partido [3])) {
retorno '// ADVERTENCIA: un error introducido en'
. 'PHP 5.4 que'
. 'Afecta al controlador asignado por'
. 'Session_set_save_handler () y'
. 'Donde ignore_user_abort () es TRUE
. 'Ha sido fijado en PHP 7.'
. 'Potencialmente, esto podría romper'
. Su código de la sección "
. 'ciertas circunstancias.' . PHP_EOL
. A ver: http://php.net/manual/en/ '
. 'Migration70.incompatible.php'
. $ Partido [0];
} Else {
devolver $ partido [0]; }},
20
4. Cualquier intento de utilizar << o >> con un operador negativa, o más allá de 64, se envuelve en una
try {xxx} catch () {} xxx bloque, buscando una ArithmeticError para ser lanzado:
PHP 7 ha cambiado cómo se manejan los errores. En algunos casos, los errores se mudaron a
una clasificación similar como excepciones, y pueden ser capturados! Ambos Error y el Excepción
clase implemente el throwable
interfaz. Si se desea capturar o bien una Error o un Excepción, captura
Throwable.
5. A continuación, el convertidor vuelve a escribir cualquier uso de call_user_method * (), que tiene
ha eliminado en PHP 7. Estos son reemplazados con el uso del equivalente call_user_ func * ():
21
función (coincidencia $) {
retorno '// ADVERTENCIA: call_user_method_array ()'
. 'Ha sido retirado de PHP 7'
. PHP_EOL
. 'Call_user_func_array (['
. trim ($ partido [2]). ''
. trim ($ partido [1]). '],'
. $ Partido [3]. ');';
},
6. Por último, cualquier intento de utilizar preg_replace () con el / mi modificador se reescribe usando
un preg_replace_callback ():
// array final],
);
// devuelve el resultado como una implosión de retorno
de cadena ( '', $ resultado); }
22
Cómo funciona…
Para utilizar el convertidor, ejecute el código siguiente desde la línea de comandos. Tendrá que suministrar el nombre de archivo del
código de PHP 5 que va a escanear como un argumento. Este bloque de código, chap_01_php5_to_php7_code_converter.php, ejecutar
<? Php
// obtener nombre de archivo para escanear desde la línea de comandos $
archivo = $ argv [1] ?? '';
if (! $ filename) {
echo 'Sin nombre proporcionado'. PHP_EOL; 'Uso:' eco.
PHP_EOL;
__FILE__ eco. '<Nombre de archivo'. PHP_EOL; salida; }
Ver también
Para obtener más información sobre los cambios hacia atrás incompatibles, consulte http: // php. net /
manual / en / migration70.incompatible.php.
23