PHP 101

Non si può negare che la nostra è un'industria incredibilmente difficile. Hai mai pensato di imparare una seconda lingua? Bene, che ne dici di cinque? Questo è ciò che ti verrà richiesto se intendi diventare uno sviluppatore web moderno. Considerando questo, se non stai attento, molto rapidamente, potresti trovarti sopraffatto, mentre fissi ciecamente gli innumerevoli articoli di blog confusionari, o libri tecnici.

La chiave, come qualsiasi cosa, è fare un passo alla volta.

La chiave, come qualsiasi cosa, è fare un passo alla volta. Ti sbaglieresti per non aver imparato una lingua parlata in un mese? Ovviamente no. Quindi applica lo stesso livello di pensiero al tuo viaggio di programmazione. Queste cose richiedono tempo, ma, se continui a spingere in avanti, sarai lì in pochissimo tempo. Non fermarti!

Il primo passo è HTML. Capire quale scopo a

servi. Scopri come strutturare il contenuto usando i tag semantici. Costruisci una pagina web semplice, senza stile.

Il secondo passo, come avrete intuito, è CSS. Scopri come modellare gli elementi sulla pagina. Apprezza ciò a cui si riferisce "separazione delle preoccupazioni" e in che modo si applica al tuo HTML e CSS. Completa il tuo primo semplice sito web.

Il terzo passo è quando gli sviluppatori iniziano a ramificarsi nelle loro specialità. A questo punto, potresti tuffarti nel mondo di JavaScript, che sta esplodendo come mai prima d'ora. Oppure, potresti invece concentrare i tuoi sforzi sul back-end.

Confuso dalla differenza tra fine frontale e backend? Pensa al frontend come la punta dell'iceberg che ha abbattuto il Titanic. È la parte dell'applicazione che è visibile all'utente e può essere interagita con. Il back-end, d'altra parte, gestisce tutto, dalla persistenza, alle convalide, al routing.

Per gli scopi di questo articolo, supponiamo che tu abbia scelto quest'ultima opzione; il lato server, lo è!

Non si può negare il fatto che PHP domina il web.

Sfortunatamente, ancora una volta, vi imbattete in una manciata di strade da percorrere. Dovresti scegliere l'opzione più popolare - PHP? Che mi dici di Ruby? I bambini fantastici sembrano preferire che questi giorni. Poi di nuovo, cosa succede se hai la barba? Python è la scelta giusta. Ancora più importante, però, come potresti effettuare una selezione, quando non hai esperienza?

In situazioni come questa - e secondo l'autore - non esiste una scelta sbagliata. E, certamente, non c'è nulla che ti impedisca di cambiare strada. Infatti, tutti gli sviluppatori sono incoraggiati ad imparare più lingue! Per ora, tuttavia, la chiave è sceglierne solo uno e impararlo bene.

Mentre è vero che PHP non è il più bello dei linguaggi, non si può negare il fatto che domina il web. In effetti, è il linguaggio di scripting più popolare al mondo. Il vantaggio di questo è che si può essere certi che ogni domanda PHP è già stato chiesto, risolto e documentato. C'è conforto nel saperlo. Sebbene tu sia nella fase più delicata del tuo apprendimento, una grande comunità amichevole è a portata di mano, pronta ad aiutarti. Ancora meglio, PHP sta vivendo un rinascimento moderno come mai prima d'ora, grazie a strumenti come Composer e Laravel.


Cos'è il PHP?

PHP, un acronimo per PHP: Preprocessore ipertestuale (sì, gli sviluppatori adorano le loro battute ricorsive), è un linguaggio di scripting che è stato costruito appositamente per il web. Le probabilità sono alte, tuttavia, che questo non significhi nulla per te. Linguaggio di scripting? Eh? Quando porteresti PHP per un semplice HTML? Bene, forse un esempio è in ordine. Supponendo che hai installato correttamente PHP, crea un index.php file all'interno di una nuova cartella sul desktop e aggiungere:

 

Sì, è l'onnipresente "Ciao mondo"esempio con cui ti familiarizzerai man mano che le tue abilità progrediranno, ogni lingua / struttura / strumento ne ha una!

Per eseguire questo codice, utilizzare il server integrato di PHP. Passa al tuo strumento di riga di comando preferito (Terminale, per utenti Mac), CD alla cartella del progetto e all'avvio del server con php -S localhost: 8888. Questo comando si traduce in "Esegui un server e rendilo accessibile dal mio browser su localhost, porta 8888. "Vai avanti e provalo! Apri Google Chrome, vai a localhost: 8888, e vedrai "Ciao mondo * "sulla pagina! Nifty! eco è un costrutto linguistico che non fa altro che generare un determinato valore.

Mancia: MAMP e WAMP sono eccellenti soluzioni one-click per l'installazione di PHP, MySQL e Apache sul tuo Mac o PC, senza dover armeggiare con la riga di comando. Possono essere scelte utili nelle prime fasi del tuo apprendimento.

WampServer è un ambiente di sviluppo che consente l'installazione con un solo clic di PHP, Apache e MySQL.

Certo, questa non è la cosa più eccitante del mondo. In effetti, probabilmente stai pensando a te stesso "Perché non potrei scrivere "Hello world" direttamente nella pagina HTML e rimuovere la necessità di PHP tutti insieme?"È vero, per questo esempio non serve a nulla, tuttavia un linguaggio di scripting come PHP diventa particolarmente utile quando l'output deve essere dinamico in natura. mondo, si desidera che il saluto faccia riferimento a un valore trasmesso tramite la stringa di query dell'URL (il testo nella barra degli indirizzi che viene dopo il punto interrogativo). Ecco un esempio aggiornato, che realizza proprio questo!

 

Ah, questo introduce alcune nuove tecniche. Innanzitutto, il singolo periodo che separa il Ciao stringa e che confonde $ _GET ti consente di concatenare (o raggruppare) valori. In questo caso, desideriamo stampare "Ciao, * "e quindi il valore rappresentato da $ _GET [ 'persona']. Questo è ciò a cui ci riferiamo come un array super-globale. Per semplicità, pensa a questo come a * Get un valore dalla querystring dell'URL.

Prova questo fuori caricando localhost: 8888 / persona = Joe. Se configurato correttamente, la pagina web dovrebbe ora visualizzare "Ciao, Joe."Gioca con esso sostituendo Joe con il tuo nome Si noti come l'output viene aggiornato ogni volta che la pagina viene aggiornata? Questo semplicemente non sarebbe possibile con HTML statico.

Una delle chiavi per maturare la programmazione è considerare ogni possibile percorso attraverso il tuo codice. Ad esempio, cosa succede se no persona la chiave è disponibile? Forse la stringa di query è stata omessa del tutto. In tal caso, verrà sicuramente generato un errore, come il persona la chiave non esiste Qual è la soluzione? Mentre è vero che questo non è altro che un semplice esempio, è comunque importante considerare tutti i possibili risultati. Forniamo un valore predefinito.

 

Sebbene ci siano modi più semplici per tener conto di ciò, l'esempio sopra è un ottimo punto di partenza. È anche la tua prima introduzione alle affermazioni condizionali. Avvicinati al tuo codice nello stesso modo in cui gestirai gli scenari nella vita reale. Per esempio, "Se siamo senza latte, allora vai al negozio. Altrimenti, rimani a casa."Questa linea di pensiero potrebbe essere tradotta in PHP, usando la seguente logica:

$ outOfMilk = true; if ($ outOfMilk) echo 'Uscire allo store.';  else echo 'La colazione è servita.' 

In questo bit di codice, solo una singola riga di testo verrà stampata sullo schermo. Il valore della variabile (un valore dinamico), $ outOfMilk, determinerà il flusso di controllo.

Mancia: Per dichiarare le variabili in PHP, precedere qualsiasi nome con un segno di dollaro. Come best practice, optare per nomi di variabili leggibili su alternative criptiche.

Tornando all'esempio precedente, fino a quando $ _GET [ 'persona'] è impostato (si consideri questo come uno pseudo-nome per "è disponibile"), quindi creane uno nuovo $ persona variabile uguale al suo valore. Altrimenti, applica un valore predefinito. Se si ritorna al browser, ora dovrebbe funzionare correttamente, indipendentemente dal fatto che persona la chiave esiste nella querystring.

Sicurezza

Purtroppo, non siamo ancora a casa libera. Una buona pratica di programmazione chiave è mettere la sicurezza in prima linea in ogni azione. Anche con questo esempio incredibilmente semplice, abbiamo aperto le porte a uno dei problemi di sicurezza più diffusi sul web: XSS (Cross-Site Scripting). Una vera comprensione di questo è assolutamente oltre lo scopo di questa lezione introduttiva (sono stati scritti interi libri su di esso), tuttavia, ecco un'illustrazione di base: cosa succede se $ _GET [ 'persona'] è uguale a, non una stringa, ma uno script?

http: // localhost: 8888 / persona =

Poiché questo valore non è stato disinfettato, al momento dell'esecuzione, in alcuni browser verrà visualizzata una finestra di avviso.

I browser basati su Webkit (si pensi a Chrome e Safari) ora forniscono protezione contro questi tipi di attacchi. Tuttavia, questo non è sempre stato il caso, e ancora non è in Firefox e Internet Explorer.

Yikes! Non possiamo averlo. Mentre la società moderna afferma che un uomo è innocente fino a prova contraria, lo stesso non è vero per il mondo della programmazione. Tutti gli input dell'utente sono colpevoli fino a quando non sono stati disinfettati! Ecco un esempio aggiornato che fa proprio questo:

 

Con questa modifica, se qualcuno dovesse tentare un attacco XSS, saremo pronti! htmlspecialchars è una funzione nativa di PHP che traduce vari simboli nelle loro contro-parti di entità. & diventa &, < diventa <, ecc. Questo lo rende lo strumento perfetto per fornire quel tocco in più di sicurezza.

Grande; nessun danno fatto!


funzioni

Mentre PHP viene fornito con una pletora di funzioni native, ci saranno certamente momenti in cui richiederne uno. Fortunatamente, sono un gioco da ragazzi per scrivere.

Pensa a una funzione come a un pezzo di logica riutilizzabile che può essere estratto, in modo che possa essere identificato e chiamato, usando un nome leggibile.

Forse gestisci un night club (probabilmente se stai leggendo questo!) E hai bisogno di un modo semplice per accettare la data di nascita di una persona e calcolare se ha almeno ventuno anni. Una funzione personalizzata sarebbe un modo eccellente per svolgere questo compito.

Il primo passo è definire una nuova funzione, chiamata isAdult. Le funzioni possono accettare input esterni, che possono quindi essere utilizzati. Ciò consente ai dati restituiti dalla funzione di essere dinamici. In questo caso, per determinare se una persona è un adulto, dobbiamo conoscere il loro anno di nascita. Il passo finale è quello di restituire entrambi vero o falso, dipende dal fatto che l'anno in corso meno la data di nascita della persona sia di almeno ventuno.

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

È davvero abbastanza semplice! Ora, dobbiamo solo passarlo al buttafuori. Una funzione può essere attivata o chiamata, facendo riferimento al suo nome, seguito da una serie di parentesi: isAdult (). Tuttavia, se la funzione richiede un argomento, è possibile specificarlo all'interno di queste parentesi, come illustrato di seguito:

if (isAdult (1985)) echo 'Come on in!';  else echo 'Per favore, vattene ora, prima chiamo tua madre.'; 

C'è un problema lampante con questo isAdult funzione. L'anno in corso è stato hard-coded. Certo, funzionerà per tutto il 2013, ma per quanto riguarda l'anno prossimo? Sembra che anche questo valore debba essere dinamico. PHP fornisce a Data funzione, che può essere utilizzata per calcolare l'anno corrente. In quanto tale, la funzione può essere aggiornata a:

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

Array

Avanziamo di alcuni mesi e, ora, la discoteca sta andando meglio che mai. In effetti, sta andando così bene al punto che il buttafuori non può tenere il passo. Il suo lavoro potrebbe essere più semplice se potesse filtrare attraverso un gruppo di persone alla volta.

Pensa a un array come contenitore per i dati correlati. Potresti anche chiamarlo come una lista: una lista di tweet, un gruppo di familiari, una serie di date di nascita.

Un array nell'ultima versione di PHP (5.4) può essere definito utilizzando un elenco separato da virgole tra parentesi, in questo modo:

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

Questo singolo $ gruppo la variabile ora contiene più date di nascita. È possibile accedere ai valori al suo interno specificando un indice, ad esempio $ Gruppo [0]. Gli array sono quelli a cui ci riferiamo come basati su zero. In traduzione, ciò significa che il primo elemento, o chiave, nell'array avrà un indice pari a zero. Come tale, per accedere al valore del 1992, faresti riferimento $ Gruppo [2].

Ora, il buttafuori può filtrare rapidamente attraverso queste date di nascita e calcolare se consentire la persona o rifiutarle. UN per ciascuno la dichiarazione può essere utilizzata per questo tipo di filtro.

$ group = [1985, 1990, 1992, 1997]; foreach ($ group as $ yob) if (isAdult ($ yob)) echo 'Come on in!';  else echo 'Per favore, vattene ora, prima chiamo tua madre.'; 

Si noti come il buttafuori dichiara che l'anno di nascita per ciascuno persona nel gruppo dovrebbe essere contenuto all'interno della variabile, yob $. Successivamente, come ha fatto prima, passa quel valore al isAdult funzione e procede di conseguenza.

È possibile, tuttavia, che il buttafuori si confonda quando non ha un collegamento tra l'anno di nascita della persona e il loro nome. PHP consente anche array associativi, che forniscono le funzionalità necessarie per associare un dato valore con una chiave. Ecco un esempio:

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

Così va meglio. Come bonus aggiuntivo, il buttafuori può essere un po 'più amichevole per la persona, ora che conosce il suo nome.

$ group = ['John' => 1985, 'Susan' => 1990, 'Joe' => 1992, 'Sara' => 1997]; foreach ($ group as $ name => $ yob) if (isAdult ($ yob)) echo "Vieni dentro, $ name!";  else echo "Per favore, lascia ora $ name, prima chiamo tua madre."; 

Quando si memorizzano le stringhe tra virgolette doppie, è possibile nidificare le variabili anziché utilizzare la concatenazione. Questo può prestarsi per una sintassi più leggibile.


Classi

La programmazione orientata agli oggetti va ben oltre lo scopo di questo tutorial, ma, comunque, le classi meritano una menzione. Per ora, considerali come semplici contenitori per proprietà e metodi correlati. Ad esempio, ecco come potrebbe apparire una classe che rappresenta una singola persona:

class Person public $ name; pubblico $ età; funzione pubblica __construct ($ name, $ age) $ this-> nome = $ nome; $ this-> age = $ age; 

Notare che __costruire() metodo? Questo è indicato come un metodo magico e verrà attivato immediatamente dopo l'istanziazione. Quando questo metodo viene attivato, accetta un nome e l'età, quindi li collega all'oggetto.

Per utilizzare questa classe, prova:

$ me = new Person ('Jeffrey', 28);

Questo creerà una nuova istanza di Persona classe. Questa istanza, che è memorizzata nel me $ variabile, può essere indicato come un oggetto. Ora, non c'è nulla che ti impedisce di creare più istanze di questa classe - e, di fatto, in progetti del mondo reale, lo farai! La classe è solo un progetto.

A questo punto, però, la classe non è eccessivamente utile. Aggiungiamo un metodo o una funzione per designare il coniuge di una persona.

class Person public $ name; pubblico $ età; pubblico $ coniuge; funzione pubblica __construct ($ name, $ age) $ this-> nome = $ nome; $ this-> age = $ age;  matrimonio pubblico (Persona $ coniuge) $ this-> coniuge = $ coniuge;  $ me = new Person ('Jeff', 28); $ her = new Person ('Allison', 28); $ Me-> sposarsi ($ lei);

Questo codice modificato ora include a sposare() metodo che aggiornerà a $ coniuge proprietà sull'oggetto. Ora hai un collegamento diretto tra le due persone.

Se un argomento del metodo è preceduto da un nome di classe (Persona $ coniuge), indicato come hint di tipo, questo designa che il parametro deve essere un'istanza della classe data, oppure verrà generato un errore.

Per recuperare il nome di mia moglie, potresti scrivere:

echo $ me-> coniuge-> nome; // Allison

Il concetto di programmazione orientata agli oggetti è molto più profondo di questo, ma per il momento è semplice. Aiuta a pensare alle classi come nomi singolari: un tweet, o utente, o cliente o file.

Il vero apprezzamento per questo modello arriverà solo col tempo.

Mani su

Metti alla prova le tue nuove abilità trovate. Come potresti procedere con la registrazione e la visualizzazione dei tweet per un utente sulla pagina? Bene, il primo passo potrebbe essere quello di definire una classe che rappresenta un singolo Tweet. Questa classe dovrebbe memorizzare le proprietà per il corpo del tweet e la data di pubblicazione. Inoltre, dovrebbe garantire che il corpo del tweet non superi i 140 caratteri. Ecco una prima pugnalata a una classe del genere:

classe Tweet corpo pubblico $; pubblico $ pubDate; funzione pubblica __construct ($ body) $ this-> setBody ($ body); $ this-> setPubDate (new DateTime);  public function setBody ($ body) if (strlen ($ body)> 140) lancia una nuova InvalidArgumentException;  $ this-> body = $ body;  public setPubDate (DateTime $ date) $ this-> pubDate = $ date-> format ('Y / m / d H: i: s'); 

Anche se all'inizio potrebbe sembrare schiacciante, dai un po 'di studio a questo frammento di codice e cerca di capire cosa sta succedendo in ogni fase del processo. Potresti scoprire che è abbastanza leggibile!

Un interessante nuovo elemento di funzionalità deriva da setBody metodo. Se il testo fornito supera 140 caratteri, che possiamo calcolare usando PHP strlen funzione, quindi dovremmo fare un'eccezione, perché infrange le regole di un tweet. Un'eccezione può essere generata usando la sintassi, lanciare un nuovo ExceptionType.

Ora che abbiamo un contenitore abbastanza buono per un tweet, possiamo creare un paio di tweet, memorizzarli in un array e quindi, in definitiva, renderli nella pagina, usando un per ciascuno dichiarazione.

$ tweets = []; # aggiungi due nuovi tweet all'array $ tweets [] = new Tweet ('Going to the store.'); $ tweets [] = new Tweet ('Back from the store!'); # Filtra e visualizza sulla pagina. foreach ($ tweets come $ tweet) echo "

$ Tweet-> corpo

"; eco "

Inserito su: $ tweet-> pubDate

";

Dopo aver visto l'output nel browser, dovresti vedere qualcosa sulla falsariga di:

Eccellente, ma come possiamo salvare quei tweet?


Conservazione

Finora, hai imparato l'essenziale: variabili, condizionali, funzioni, matrici, classi. C'è dell'altro da coprire, ma dovresti fare una ricerca per conto tuo, se necessario. Il prossimo passo nel tuo apprendimento è la persistenza. Ad esempio, come potresti tenere un registro di tutti i tweet? Un servizio di tweet che non lo fa ricorda i tweet sono terribili! Questo è quando l'idea di database entra in gioco.

Pensa a una tabella di database come un foglio di calcolo di Excel. Può avere un numero qualsiasi di campi, come il nome della persona, l'età o l'indirizzo postale. Tuttavia, PHP non fornisce questo tipo di memoria in modo nativo. Invece, l'opzione più comune è MySQL, che è il database open source più popolare al mondo.

L'installazione di MySQL non rientra nell'ambito di questo tutorial. Invece, fai riferimento a questo tutorial su Nettuts + per un completo walk-through.

Ecco un esempio semplificato per iniziare a recuperare in modo sicuro le righe da una tabella di database. Non preoccuparti se sembra schiacciante. MySQL è la tua seconda lingua nuova da imparare. L'API PDO di PHP, così come il linguaggio di query stesso, richiedono tempo per imparare.

Innanzitutto, avrai bisogno di un modo per connettersi al database.

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

PDO è una delle tre API disponibili di PHP per la connessione a un database MySQL.

Successivamente, aggiungeremo una funzione di supporto per recuperare tutti i record dalla tabella dei tweet. Presta molta attenzione al domanda argomento del metodo, SELEZIONA * DA tweet. Questo è un linguaggio speciale per interrogare il database. In questo caso, stiamo usando il * simbolo per fare riferimento a tutte le righe. Come tale, stiamo selezionando tutte le righe dalla tabella, chiamate tweets.

Questa funzione prepara la query, quindi recupera il set di risultati completo.

function fetchTweets ($ conn) $ stmt = $ conn-> query ('SELECT * FROM tweets'); return $ stmt-> fetchAll (PDO :: FETCH_OBJ); 

Ora, con lo stage set, dobbiamo solo chiamare le funzioni, di conseguenza.

# Connetti al DB $ conn = connect (); # Recupera tutte le righe dalla tabella dei partecipanti var_dump (fetchTweets ($ conn));

Un modo semplice per scaricare il contenuto di una variabile è attraverso l'uso di var_dump funzione. Se si passa l'output di fetchTweets ($ conn) a questa funzione, dopo averla visualizzata nel browser, vedrai qualcosa sulla falsariga di:

var_dump è utile per il debug, ma per scopi di produzione, è meglio filtrare i risultati e renderli correttamente nella pagina. Il per ciascuno l'affermazione, che hai già familiarità, gestirà il lavoro abbastanza bene!

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

$ Tweet-> corpo

"; eco "

$ Tweet-> pubDate

";

Conclusione

Come per qualsiasi abilità, scrivere PHP fluente non richiede altro che il tuo tempo. Potrebbero essere necessarie centinaia di ore per essere completamente distrutti, ma va bene. Questo è divertente, giusto? Dovrebbe essere!

Il modo migliore per imparare è fare. Costruisci progetti buttati via come se fossero fuori moda! Le tecniche delineate in questo tutorial ti porteranno alla prima fase, ma, sicuramente, man mano che le tue abilità progrediranno, passerai ad argomenti più avanzati, come framework PHP, schemi di progettazione e sviluppo basato sui test. Divertiti!

Tut consigliati + risorsa premium

  • Lo sviluppatore PHP moderno
  • Fondamenti di PHP
  • SQL Essentials