PHP 101

No se puede negar que la nuestra es una industria increíblemente difícil. ¿Ha considerado alguna vez aprender un segundo idioma? Bueno, ¿qué tal cinco? Eso es lo que se requerirá de usted, si pretende convertirse en un desarrollador web moderno. Teniendo en cuenta esto, si no tienes cuidado, muy rápido, puedes encontrarte abrumado, mientras observas ciegamente los innumerables artículos confusos del blog o libros técnicos..

La clave, como con cualquier cosa, es dar un paso a la vez..

La clave, como con cualquier cosa, es dar un paso a la vez. ¿Te culparías por no aprender un idioma hablado en un mes? Por supuesto no. Luego aplique ese mismo nivel de pensamiento a su viaje de programación. Estas cosas llevan tiempo, pero, mientras continúes avanzando, estarás allí en un momento. No te detengas!

El primer paso es HTML. Entender qué propósito un

sirve Aprenda cómo estructurar el contenido utilizando etiquetas semánticas. Construye una página web básica, sin estilo..

El segundo paso, como habrás adivinado, es CSS. Aprende a diseñar elementos en la página. Aprecie a qué se refiere la "separación de preocupaciones", y cómo se aplica esto a su HTML y CSS. Completa tu primer sitio web simple.

El tercer paso es cuando los desarrolladores comienzan a ramificarse en sus propias especialidades. En este punto, podría sumergirse en el mundo de JavaScript, que está en auge como nunca antes. O bien, podría centrar sus esfuerzos en el backend..

Confundido por la diferencia entre Interfaz y backend? Piense en la interfaz como la punta del iceberg que derribó el Titanic. Es la parte de la aplicación que es visible para el usuario y se puede interactuar con ella. El backend, por otro lado, maneja todo, desde la persistencia hasta las validaciones y el enrutamiento..

A los efectos de este artículo, supongamos que ha elegido la última opción; el lado del servidor, es!

No se puede negar el hecho de que PHP domina la web..

Desafortunadamente, una vez más, te encuentras con un puñado de caminos para tomar. ¿Debería elegir la opción más popular - PHP? ¿Qué pasa con Ruby? Los chicos cool parecen preferir eso en estos días. Entonces otra vez, ¿qué pasa si tienes barba? Es Python la elección correcta. Sin embargo, lo más importante es cómo podría hacer una selección cuando no tiene experiencia.?

En situaciones como esta, y en opinión de este autor, no hay una elección incorrecta. Y, ciertamente, no hay nada que le prohíba cambiarse por el camino. De hecho, ¡todos los desarrolladores están invitados a aprender varios idiomas! Por ahora, sin embargo, la clave es elegir solo uno y aprenderlo bien..

Si bien es cierto que PHP no es el idioma más hermoso, no se puede negar el hecho de que domina la web. De hecho, es el lenguaje de scripting más popular del mundo. El beneficio de esto es que puede estar seguro de que cada pregunta de PHP ya se ha formulado, resuelto y documentado. Hay consuelo en saber esto. Aunque se encuentra en la etapa más frágil de su aprendizaje, una comunidad masiva y amigable está a su puerta, lista para ayudar. Aún mejor, PHP está experimentando un renacimiento moderno como nunca antes, gracias a herramientas como Composer y Laravel.


Que es PHP?

PHP, un acrónimo de PHP: preprocesador de hipertexto (sí, a los desarrolladores les encantan sus chistes recursivos), es un lenguaje de scripting que fue creado específicamente para la web. Sin embargo, hay muchas posibilidades de que esto todavía no signifique nada para ti. ¿Lenguaje de escritura? Eh ¿Cuándo alcanzarías PHP sobre HTML simple? Bueno, tal vez un ejemplo está en orden. Suponiendo que haya instalado PHP correctamente, cree un index.php archivo dentro de una nueva carpeta en su escritorio, y agregue:

 

Sí, es el ubicuo "Hola Mundo"ejemplo con el que se familiarizará con el progreso de sus habilidades. Cada idioma / marco / herramienta tiene uno!

Para ejecutar este código, use el servidor incorporado de PHP. Cambie a su herramienta de línea de comandos favorita (Terminal, para usuarios de Mac), discos compactos a la carpeta del proyecto, y arranque el servidor con php -S localhost: 8888. Este comando se traduce a "Ejecute un servidor y haga que sea accesible desde mi navegador en localhost, puerto 8888. "¡Adelante, pruébelo! Abra Google Chrome, navegue hasta localhost: 8888, y verás "Hola mundo * "en la página! Nifty! eco es una construcción de lenguaje que no hace nada más que generar un valor dado.

Propina: MAMP y WAMP son excelentes soluciones con un solo clic para instalar PHP, MySQL y Apache en tu Mac o PC, sin tener que buscar en la línea de comandos. Pueden ser opciones útiles en las primeras etapas de su aprendizaje..

WampServer es un entorno de desarrollo que permite la instalación de PHP, Apache y MySQL con un solo clic..

Es cierto que esto no es lo más emocionante del mundo. De hecho, es probable que estés pensando "¿Por qué no podría escribir 'Hello world' directamente en la página HTML y eliminar la necesidad de PHP por completo??"Es cierto; para este ejemplo, no sirve para nada. Sin embargo, un lenguaje de scripting como PHP se vuelve particularmente útil cuando la salida debería ser de naturaleza dinámica. Qué tal si, en lugar de mundo, desea que el saludo haga referencia a un valor pasado a través de la cadena de consulta de la URL (el texto en la barra de direcciones que aparece después del signo de interrogación). Aquí hay un ejemplo actualizado, que logra precisamente eso!

 

Ahh, esto introduce algunas nuevas técnicas. En primer lugar, el único período que separa a Hola cuerda y que confuso $ _GET le permite concatenar (o agrupar) valores. En este caso, queremos imprimir "Hola, * "y luego el valor representado por $ _GET ['persona']. Esto es lo que llamamos una matriz súper global. En aras de la simplicidad, piense en esto como una manera de * GET un valor de la cadena de consulta de la URL.

Prueba esto cargando localhost: 8888 /? person = Joe. Si se configura correctamente, la página web debería mostrar ahora "Hola Joe."Juega con esto reemplazando Joe con tu propio nombre ¿Observa cómo se actualiza la salida cada vez que se actualiza la página? Esto simplemente no sería posible con HTML estático.

Una de las claves para una programación madura es considerar todos los caminos posibles a través de su código. Por ejemplo, ¿y si no? persona clave está disponible? Quizás la cadena de consulta fue omitida por completo. En ese caso, un error será ciertamente lanzado, como el persona la llave no existirá ¿Cual es la solución? Si bien es cierto que esto no es más que un simple ejemplo, aún es importante considerar todos los resultados posibles. Vamos a proporcionar un valor predeterminado.

 

Aunque hay formas más simplificadas de permitir esto, el ejemplo anterior es un excelente punto de partida. También es su primera introducción a las declaraciones condicionales. Enfoque su código de la misma manera que manejaría los escenarios en la vida real. Por ejemplo, "Si nos quedamos sin leche, ve a la tienda. De lo contrario, quédate en casa."Esta línea de pensamiento podría traducirse a PHP, usando la siguiente lógica:

$ outOfMilk = true; if ($ outOfMilk) echo 'Saliendo a la tienda';  else echo 'Se sirve el desayuno'. 

En este bit de código, solo se imprimirá una sola línea de texto en la pantalla. El valor de la variable (un valor dinámico), $ outOfMilk, determinará el flujo de control.

Propina: Para declarar variables en PHP, preceda cualquier nombre con un signo de dólar. Como práctica recomendada, opte por nombres de variables legibles sobre alternativas crípticas.

Volviendo al ejemplo anterior, siempre que $ _GET ['persona'] está establecido (piense en esto como un seudónimo para "está disponible"), luego cree un nuevo $ persona Variable igual a su valor. De lo contrario, aplique un valor predeterminado. Si regresa al navegador, ahora debería funcionar correctamente, independientemente de si el persona clave existe en la cadena de consulta.

Seguridad

Desafortunadamente, todavía no estamos en casa libres. Una buena práctica de programación clave es colocar la seguridad a la vanguardia de cada acción. Incluso con este ejemplo increíblemente básico, hemos abierto la puerta a uno de los problemas de seguridad más generalizados en la web: XSS (Cross-Site Scripting). Una verdadera comprensión de esto está absolutamente más allá del alcance de esta lección introductoria (se han escrito libros completos en ella), sin embargo, aquí hay una ilustración básica: ¿qué pasaría si $ _GET ['persona'] es igual a, no una cadena, sino un script?

http: // localhost: 8888 /? person =

Debido a que este valor no se ha saneado, en la ejecución, en algunos navegadores, se mostrará un cuadro de alerta.

Los navegadores basados ​​en Webkit (piense en Chrome y Safari) ahora brindan protección contra este tipo de ataques. Sin embargo, esto no siempre fue así, y aún no está en Firefox e Internet Explorer.

¡Ay! No podemos tener eso. Mientras que la sociedad moderna dicta que un hombre es inocente hasta que se pruebe su culpabilidad, lo mismo no es cierto para el mundo de la programación. ¡Toda la entrada del usuario es culpable hasta que sea saneada! Aquí hay un ejemplo actualizado que hace esto mismo:

 

Con esta modificación, si alguien intentara un ataque XSS, estaremos listos! htmlspecialchars es una función nativa de PHP que traduce varios símbolos a sus contrapartes de entidad. Y se convierte en Y, < se convierte en <, etc. Esto lo convierte en la herramienta perfecta para proporcionar ese bit de seguridad adicional..

Genial; ningún daño hecho!


Funciones

Si bien PHP se entrega con una gran cantidad de funciones nativas, seguramente habrá momentos en los que requiera la suya propia. Por suerte, son muy fáciles de escribir..

Piense en una función como una pieza de lógica reutilizable que se puede abstraer, para que pueda identificarse y llamarse, usando un nombre legible.

Tal vez ejecute un club nocturno (¡no es probable si está leyendo esto!), Y necesita una manera fácil de aceptar la fecha de nacimiento de una persona, y calcular si tiene al menos veintiún años. Una función personalizada sería una excelente manera de realizar esta tarea..

El primer paso es definir una nueva función, llamada isAdult. Las funciones pueden aceptar entrada externa, que luego puede ser operada. Esto permite que los datos devueltos de la función sean dinámicos. En este caso, para determinar si una persona es una persona adulta, necesitamos saber su año de nacimiento. El paso final es volver ya sea cierto o falso, depende de si el año actual menos la fecha de nacimiento de la persona es al menos veintiuno.

function isAdult ($ yob) $ currentYear = 2013; return $ currentYear - $ yob> = 21; 

Es realmente muy simple! Ahora, solo tenemos que pasárselo al portero. Una función puede ser activada, o llamada, haciendo referencia a su nombre, seguido de un conjunto de paréntesis: isAdult (). Sin embargo, si la función requiere un argumento, puede especificarla dentro de estos paréntesis, como se ilustra a continuación:

if (isAdult (1985)) echo '¡Adelante!';  else echo 'Por favor, vete ahora, antes de que llame a tu madre.'; 

Hay un problema evidente con esto isAdult función. El año en curso ha sido codificado. Claro, funcionará a lo largo de 2013, pero ¿y el año que viene? Parece que este valor, también, debe ser dinámico. PHP proporciona una fecha Función, que se puede utilizar para calcular el año actual. Como tal, la función se puede actualizar a:

function isAdult ($ yob) $ currentYear = date ('Y'); return $ currentYear - $ yob> = 21; 

Arrays

Avancemos unos meses y, ahora, a la discoteca le va mejor que nunca. De hecho, le está yendo tan bien al punto que el portero no puede mantenerse al día. Su trabajo podría ser más fácil si pudiera filtrarse a través de un grupo de personas a la vez.

Piense en una matriz como un contenedor de datos relacionados. Incluso podría referirse a ella como una lista: una lista de tweets, un grupo de miembros de la familia, una variedad de fechas de nacimiento.

Una matriz en la última versión de PHP (5.4) puede definirse usando una lista separada por comas entre paréntesis, de esta manera:

$ grupo = [1985, 1990, 1992, 1997];

Este single $ grupo La variable ahora contiene múltiples fechas de nacimiento. Se puede acceder a los valores dentro de él especificando un índice, como $ grupo [0]. Las matrices son lo que llamamos estar basado en cero. En la traducción, esto significa que el primer elemento, o clave, en la matriz tendrá un índice de cero. Como tal, para acceder al valor de 1992, usted haría referencia a $ grupo [2].

Ahora, el portero puede filtrar rápidamente a través de estas fechas de nacimiento y calcular si se permite o no a la persona. UNA para cada declaración puede ser utilizada para este tipo de filtrado.

$ grupo = [1985, 1990, 1992, 1997]; foreach ($ group as $ yob) if (isAdult ($ yob)) echo '¡Adelante!';  else echo 'Por favor, vete ahora, antes de que llame a tu madre.'; 

Observe cómo el portero declara que el año de nacimiento. para cada persona en el grupo debe estar contenido dentro de la variable, $ yob. A continuación, como lo hizo antes, pasa ese valor a la isAdult función, y procede en consecuencia.

Sin embargo, es posible que el portero se confunda cuando no tiene un vínculo entre el año de nacimiento de la persona y su nombre. PHP también permite matrices asociativas, que proporcionan la funcionalidad necesaria para asociar un valor dado con una clave. Aquí hay un ejemplo:

$ group = ['John' => 1985, 'Susan' => 1990, 'Joe' => 1992, 'Sara' => 1997];

Eso es mejor. Como un bono adicional, el portero puede ser un poco más amigable con la persona, ahora que sabe su nombre..

$ group = ['John' => 1985, 'Susan' => 1990, 'Joe' => 1992, 'Sara' => 1997]; foreach ($ group as $ name => $ yob) if (isAdult ($ yob)) echo "¡Adelante, $ name!";  else echo "Por favor, deje ahora, $ nombre, antes de que llame a su madre."; 

Al almacenar cadenas dentro de comillas dobles, puede anidar variables en lugar de usar concatenación. Esto puede prestarse para una sintaxis más legible.


Las clases

La programación orientada a objetos está más allá del alcance de este tutorial, pero, sin embargo, las clases merecen una mención. Por ahora, piense en ellos como contenedores simples para propiedades y métodos relacionados. Por ejemplo, aquí es cómo podría verse una clase que representa a una sola persona:

clase Persona nombre público $; $ edad pública función pública __construct ($ name, $ age) $ this-> name = $ name; $ this-> age = $ age; 

Darse cuenta de __construir() ¿método? Esto se conoce como un método mágico y se activará inmediatamente después de la instanciación. Cuando se dispara este método, aceptará un nombre y una edad, y luego lo adjuntará al objeto.

Para usar esta clase, intente:

$ me = nueva Persona ('Jeffrey', 28);

Esto creará una nueva instancia de la Persona clase. Esta instancia, que se almacena en el $ yo variable, puede ser referido como un objeto. Ahora, no hay nada que le prohíba crear múltiples instancias de esta clase - y, de hecho, en proyectos del mundo real, ¡lo hará! La clase es solo un plano.

En este punto, sin embargo, la clase no es demasiado útil. Agreguemos un método o función para designar al cónyuge de una persona.

clase Persona nombre público $; $ edad pública cónyuge público función pública __construct ($ name, $ age) $ this-> name = $ name; $ this-> age = $ age;  función pública casarse (persona $ cónyuge) $ this-> cónyuge = $ cónyuge;  $ me = nueva persona ('Jeff', 28); $ her = nueva Persona ('Allison', 28); $ me-> casarse ($ ella);

Este código modificado ahora incluye un casar() método que actualizará un $ cónyuge Propiedad sobre el objeto. Ahora, tienes un enlace directo entre las dos personas.

Si un argumento de método está precedido por un nombre de clase (Persona $ cónyuge), referido como sugerencias de tipo, esto designa que el parámetro debe ser una instancia de la clase dada, o se producirá un error.

Para buscar el nombre de mi cónyuge, podrías escribir:

echo $ me-> cónyuge-> nombre; // Allison

El concepto de programación orientada a objetos va mucho más allá de esto, pero que sea simple por ahora. Es útil pensar en las clases como sustantivos singulares: un tweet, un usuario, un cliente o un archivo..

La verdadera apreciación de este patrón solo vendrá con el tiempo..

Las manos en

Pon a prueba tus nuevas habilidades encontradas. ¿Cómo podría registrarse y mostrar tweets para un usuario en la página? Bueno, el primer paso podría ser definir una clase que represente una sola Pío. Esta clase debe almacenar propiedades para el cuerpo del tweet, así como su fecha de publicación. Además, debe asegurarse de que el cuerpo del tweet no exceda los 140 caracteres. Aquí hay una primera puñalada en una clase así:

clase Tweet public $ body; public $ pubDate; función pública __construct ($ body) $ this-> setBody ($ body); $ this-> setPubDate (new DateTime);  función pública setBody ($ body) if (strlen ($ body)> 140) lanza la nueva excepción InvalidArgumentException;  $ this-> body = $ body;  función pública setPubDate (DateTime $ date) $ this-> pubDate = $ date-> format ('Y / m / d H: i: s'); 

Aunque inicialmente puede parecer abrumador, analice este fragmento de código e intente comprender qué está sucediendo en cada paso del camino. Usted puede encontrar que es bastante legible!

Una nueva pieza interesante de funcionalidad proviene de la setBody método. Si el texto proporcionado supera los 140 caracteres, que podemos calcular utilizando PHP Strlen función, entonces deberíamos hacer una excepción a eso, porque rompe las reglas de un tweet. Se puede lanzar una excepción usando la sintaxis., lanzar el nuevo tipo de excepción.

Ahora que tenemos un contenedor lo suficientemente decente para un tweet, podemos crear un par de tweets, almacenarlos en una matriz y, finalmente, renderizarlos en la página, usando un para cada declaración.

$ tweets = []; # agregar dos tweets nuevos a la matriz $ tweets [] = new Tweet ('Ir a la tienda'); $ tweets [] = new Tweet ('Back from the store!'); # Filtrar a través, y mostrar en la página. foreach ($ tweets como $ tweet) echo "

$ tweet-> cuerpo

"; eco "

Publicado en: $ tweet-> pubDate

";

Al ver la salida en el navegador, debería ver algo similar a lo siguiente:

Excelente, pero ¿cómo guardamos esos tweets??


Almacenamiento

Hasta ahora, has aprendido lo esencial: variables, condicionales, funciones, matrices, clases. Hay más que cubrir, pero debes investigar eso por tu cuenta, según sea necesario. El siguiente paso en tu aprendizaje es la persistencia. Por ejemplo, ¿cómo puedes mantener un registro de todos los tweets? Un servicio de tweets que no recuerda ¡Los tweets son terribles! Aquí es cuando entra en juego la idea de las bases de datos..

Piense en una tabla de base de datos como una hoja de cálculo de Excel. Puede tener cualquier número de campos, como el nombre, la edad o la dirección postal de la persona. Sin embargo, PHP no proporciona este tipo de almacenamiento de forma nativa. En cambio, la opción más común es MySQL, que es la base de datos de código abierto más popular del mundo..

La instalación de MySQL no está dentro del alcance de este tutorial. En su lugar, consulte este tutorial en Nettuts + para un recorrido completo.

Este es un ejemplo simplificado para comenzar a recuperar filas de una tabla de base de datos de forma segura. No te preocupes si parece abrumador. MySQL es tu segundo nuevo idioma para aprender. La API de PDO de PHP, así como el lenguaje de consulta, requieren tiempo para aprender.

Primero, necesitarás una forma de conectarte a la base de datos..

function connect () $ conn = new PDO ('mysql: host = localhost; dbname = DB_NAME', 'USERNAME', 'PASSWORD'); $ conn-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION); devuelve $ conn; 

PDO es una de las tres API disponibles de PHP para conectarse a una base de datos MySQL.

A continuación, agregaremos una función auxiliar para recuperar todos los registros de la tabla de tweets. Preste mucha atención a la consulta argumento del método, SELECCIONAR * DE tweets. Este es un lenguaje especial para consultar la base de datos. En este caso, estamos utilizando el * símbolo para hacer referencia a todas las filas. Como tal, estamos seleccionando todas las filas de la tabla, llamadas tweets.

Esta función prepara la consulta y luego recupera el conjunto de resultados completo..

función fetchTweets ($ conn) $ stmt = $ conn-> query ('SELECT * FROM tweets'); devuelve $ stmt-> fetchAll (PDO :: FETCH_OBJ); 

Ahora, con el escenario configurado, solo necesitamos llamar a las funciones, en consecuencia.

# Conectar al DB $ conn = connect (); # Obtenga todas las filas de la tabla de asistentes var_dump (fetchTweets ($ conn));

Una forma fácil de volcar el contenido de una variable es mediante el uso de var_dump función. Si pasas la salida de fetchTweets ($ conn) Para esta función, al verlo en el navegador, verás algo como:

var_dump es útil para la depuración, pero para fines de producción, es mejor filtrar los resultados y mostrarlos en la página correctamente. los para cada declaración, con la que ya está familiarizado, manejará el trabajo bastante bien!

$ tweets = fetchTweets ($ conn); foreach ($ tweets como $ tweet) echo "

$ tweet-> cuerpo

"; eco "

$ tweet-> pubDate

";

Conclusión

Como con cualquier habilidad, escribir PHP con fluidez no requiere nada más que tu tiempo. Puede llevar cientos de horas desarrollarse, pero eso está bien. Esto es divertido, ¿verdad? Debería ser!

La mejor manera de aprender es hacer. ¡Construye proyectos desechables como si estuvieran pasando de moda! Las técnicas descritas en este tutorial lo guiarán a través de la primera fase, pero, sin duda, a medida que progresen sus habilidades, pasará a temas más avanzados, como marcos de PHP, patrones de diseño y desarrollo basado en pruebas. Que te diviertas!

Sugerencias Tuts + Recurso Premium

  • El desarrollador moderno de PHP
  • Fundamentos de PHP
  • SQL Essentials