Programmare in Php e Perl con Xampp e Blocco Note · PDF fileLaboratorio di sistemi Oop con Php5 e nozioni di Perl Php Programmare in Php e Perl con Xampp e Blocco Note (Windows) Xampp
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Laboratorio di sistemi Oop con Php5 e nozioni di Perl Php
Programmare in Php e Perl con Xampp e Blocco Note (Windows)Xampp contiene al suo interno, oltre all'interprete Php, anche un interprete Perl (chiamato MiniPerl).
I file scritti in Php (estensione .php) devono risiedere nella cartella htdocs di Xampp meglio se organizzati in cartelle (in Linux si può configurare Xampp per fare in modo che la cartella dell'utente coincida con la cartella dei progetti web: leggete il mio articolo dal titolo “Programmare in Php con Xampp e NetBeans IDE”, alla url http://www.mauriziocozzetto.net/pdf/netbeans_php.pdf). I file scritti in Perl (estensione .cgi o .pl) invece dovranno risiedere nella cartella cgi-bin, anch'essi organizzati in opportune cartelle.
A questo punto, scriviamo due file di prova per verificare se tutto funziona come previsto, uno in Php e l'altro in Perl. Evitiamo di creare cartelle perchè abbiamo solo due file ma teniamo ben presente che nei progetti reali, raccogliere i vari file in opportune cartelle (ad esempio una per le immagini, un'altra per i file css ecc) è ormai prassi comune perchè aiuta a tenere ordinate le risorse e il codice.
Fig. 1 – Sorgente di Hello world in php
Fig. 2 – Sorgente di Hello world in Perl (i messaggi prodotti sono dovuti alle regole poste dall'interfaccia CGI e dal protocollo HTTP, ne parleremo più avanti)
Laboratorio di sistemi Oop con Php5 e nozioni di Perl Php
Osserviamo gli output.
Fig. 3 – Hello world in Php (la url non visibile è http://localhost/test_php.php)
Fig. 4 – Hello world in Perl (la url non visibile èhttp://localhost/cgi-bin/test_perl.pl)
Programmare in Php e Perl con Xampp e DreamweaverDreamweaver, oltre che essere un ottimo strumento per grafici e designer, è anche un utile strumento per lo sviluppo di codice, in particolare di codice Php. Vediamo i passi necessari per configurare correttamente un sito (dinamico) in Dreamweaver.
Innanzitutto, attiviamo Xampp (oppure solo il web server Apache) mediante l'apposita icona o file batch che sia.
Apriamo Dreamweaver e dalla barra principale dei menu, scegliamo (per la versione in inglese) Site > New Site... e seguiamo i passi di seguito riportati:
Laboratorio di sistemi Oop con Php5 e nozioni di Perl Php
Fig. 10 – Passo 6: leggiamo le informazioni di riepilogo. Clicchiamo infine su Done
Dreamweaver creerà per noi anche la cartella ProvaPhp, che rappresenta la cartella principale del sito e nella quale raccoglieremo tutti i materiali necessari al progetto.
Procediamo in maniera analoga, se vogliamo sviluppare in Perl: basterà ricordarsi di salvare i file nella cartella cgi-bin, gestire correttamente le url e scrivere le estensioni corrette dei file (.pl o .cgi). I file .cgi sono scritti di solito nel linguaggio della shell di Linux o anche in C (o con altri linguaggi oltre che il Perl)
Programmare in Php e Perl con Xampp e Netbeans 6.5Netbeans (però a partire dalla versione 6.1 in avanti) fornisce un buon supporto al Php, in particolare al Php5 che è a oggetti. Vediamo i passi necessari per configurare correttamente l'ambiente di lavoro.
Innanzitutto, apriamo NetBeans e dal menu File, scegliamo New Project...
Laboratorio di sistemi Oop con Php5 e nozioni di Perl Php
Fig. 13 – Passo 3: scelta del server (locale) e della url del sito.Terminiamo la procedura cliccando su Finish
NetBeans, come Dreamweaver, creerà per noi la cartella del progetto, ProvaPhpApp (oltre a una cartella riservata chiamata nbprojects) e una home page chiamata index.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> <?php // put your code here ?> </body></html>
Fig. 14 – Il codice prodotto da NetBeans (index.php)
Il codice andrà collocato ovviamente tra i tag <?php e ?> come indicato anche dal commento.
Facendo qualche prova, riusciremo facilmente a configurare NetBeans 6.5 perché lavori anche con il Perl.
Nozioni di base Php/PerlLinguaggi debolmente tipizzati e variabili elementari
Il Php, come il Perl, è un linguaggio non tipizzato (o debolmente tipizzato), come quasi tutti i linguaggi interpretati o i linguaggi di scripting. Le variabili in Perl e Php hanno il segno $ davanti. Una variabile elementare locale a un certo contesto si può dichiarare e inizializzare come qui di seguito (ma si può anche evitare di scrivere la parola riservata var):
Laboratorio di sistemi Oop con Php5 e nozioni di Perl Php
<?php var $a = “ciao bionda”; ?>
Se per qualsiasi motivo, decidiamo di assegnare ad essa un valore di diverso tipo, lo possiamo fare, ma perderemo il valore memorizzato precedentemente:
<?php $a = 30; ?>
mentre se vogliamo che sia globale dobbiamo usare il modificatore di visibilità global.
Array (Php)
Un array in Php è una collezione di coppie chiave/valore. Gli indici di un array possono essere numeri interi o stringhe. Gli array si possono dichiarare usando il costrutto array che in genere ha la seguente forma:
visualizza nel browser i dati relativi alla residenza di Giovanni Rossi. il simbolo . è l'operatore di concatenamento di stringhe.
Giovanni Rossi-Via G. Verdi, 89-Brescia-1200
Se si vuole effettuare il debug del proprio applicativo, una funzione utile è print_r($array), il cui output è il seguente (nel caso dell'array $a definito in precedenza):
Array ( [nome] => Giovanni [cognome] => Rossi [residenza] => Via G. Verdi, 89 [citta] => Brescia [stipendio] => 1200)
Possiamo aggiungere elementi ad un array in diversi modi; ad esempio se:
<?php $a=array(5,6,7); ?>
le istruzioni $a[]=8; $a[]=9; $a[10]=-3; aggiungono 3 nuovi elementi all'array nelle posizioni 3,4, 10.
Per modificare un elemento di cui è nota la posizione (l'elemento deve esistere altrimenti si ottiene un messaggio di errore), è sufficiente riassegnargli un nuovo valore; ad esempio, se $a[3]=32:
Per visualizzare gli elementi di un array (non associativo), usiamo la funzione count($array) che conta il numero di elementi presenti nell'array. Se $a=array(1,2,3,4,5);
<?php for ($j=0; $j<count($a); $j++) print "elemento di posto $j=".$a[$j]; ?>
produce in output:
elemento di posto 0=1elemento di posto 1=2elemento di posto 2=3elemento di posto 3=4elemento di posto 4=5
Se l'array è associativo come in questo caso
<?php $a=array("cognome"=>"Rossi","nome"=>"Giulio","residenza"=>"Via De Martinis, 9","citta"=>"Torino","stipendio"=>1400); ?>
il seguente ciclo
<?php foreach($a as $key=>$value) print "$key=$value<br/>"; ?>
genera l'output:
cognome=Rossinome=Giulioresidenza=Via De Martinis, 9citta=Torinostipendio=1400
Gli elementi di un array possono a loro volta essere degli array. In tal modo possiamo definire tabelle e matrici:
definisce una tabella di 4 righe e 2 colonne. Per visualizzarne il contenuto per righe e per colonne, utilizziamo il seguente codice (che è abbastanza intuitivo da non richiedere ulteriori spiegazioni):
Array (Perl)In Perl, il nome della variabile usata per l'array può essere preceduta da @ per fare riferimento all'intero array o dal simbolo $ per fare riferimento alle singole componenti (non è necessario usare la parola riservata array).Esempi:
#!"C:\xampp\perl\bin\perl.exe"
@a=(13,45,65,23);
print "Content-type: text/html\n\n";print "<html>";print "<head>";print "<title>Array in Perl</title>";print "</head>";print "<body><h3>Array in Perl</h3>";
$i=0;# primo modofor(0..scalar(@a)){ print $a[$i]."<br/>"; $i++; }
# secondo modoforeach $e (@a){ print $e."<br/>"; }
# terzo modo (using special perl var)foreach (@a){ print $_."<br/>"; }
print "</body></html>";
Fig. 15 – Codice di gestione di un array in Perl
La funzione scalar restituisce il numero di elementi dell'array e ogni ciclo visualizza tutti gli elementi dell'array ognuno su una singola riga.
# secondo modoforeach (keys(%a)) { print "$_=$fields{$_}<br/>\n"; }
print "</body></html>";
Fig. 16 – Array associativo in Perl
Questa volta il simbolo da utilizzare nella dichiarazione e istanziazione dell'array associativo è % al posto della @. Se lanciamo inoltre il codice ci accorgeremo del fatto che gli elementi non vengono visualizzati nell'ordine della dichiarazione bensì seguono un “loro” ordinamento interno fissato dal Perl.
(Un particolare ringraziamento a Trimarchi per l'aiuto col Perl)
Osservazioni e note importanti per lo sviluppo a oggettiSe intendiamo lavorare a oggetti in Php5 usando con NetBeans 6.5 come IDE, il suggerimento è di comportarsi come se si lavorasse in Java in tutti i sensi. Intanto perchè i comandi di NetBeans per creare le classi in Php5 sono simili (se non gli stessi) a quelli che di solito si usano per creare classi in Java: infatti per creare una classe in Php5, dal menu principale di NetBeans, scegliamo File > New File... > (Categories) PHP > (File Types) Php Class, per cui le cose non cambiano di molto sotto il profilo operativo. Inoltre molti dei concetti tipici della programmazione Java (classe, interfaccia, metodi, costruttore ecc) sono stati “traslati” nel linguaggio Php5 per cui non si dovrebbe fare molta fatica ad adattarsi al nuovo linguaggio. Ovviamente è utile leggere un po' la documentazione.
Procediamo allora come se dovessimo scrivere un'applicazione Java, per cui se, ad esempio, dobbiamo progettare la classe Studente, il codice dovrebbe venire fuori in maniera naturale:
Laboratorio di sistemi Oop con Php5 e nozioni di Perl Php
<?php/** * Description of Prova * * @author maurizio */
class Studente { private $cognome; private $nome;
// costruttore con 2 argomenti function Studente($cognome, $nome) { $this->cognome=$cognome; $this->nome=$nome; }
// metodo che restituisce l'anagrafica di uno studente function anagrafica() { return $this->nome . " " . $this->cognome; }
// seguono getter e setter function getNome() { return $this->nome; }
function getCognome() { return $this->cognome; }
function setCognome($cognome) { $this->cognome = $cognome; }
function setNome($nome) { $this->nome = $nome; }
} // fine classe Studente?>
Fig. 15 – Codice della classe Studente (file Studente.php)
Un grave limite (superabile attualmente con dei “trucchi” ma non in maniera pulita) è che è impossibile effettuare l'overloading del costruttore. Speriamo che le prossime versioni del linguaggio provvedano a risolvere una così grave lacuna.
<?php include("Studente.php"); ?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Index</title>
Fig. 16 – File index.php e istanza di un oggetto della classe Studente
Per istanziare correttamente gli oggetti, includiamo la classe nel nostro file come evidenziato nella figura precedente. L'output è prevedibile e lo omettiamo.
Modificatori di visibilità e fase di transizione Php4 Php5 →Consigliamo vivamente di usare nelle classi i modificatori di visibilità (sono gli stessi di Java, public, private e protected) soprattutto per gli attributi, mentre sconsigliamo invece di dichiarare le variabili attributo di una classe mediante la parola riservata var (sinonimo comunque di public) in quanto questa modalità di scrittura era consentita nella fase di transizione Php4 Php5. Anche i metodi, se non riportano nessun modificatore di visibilità,→ sono considerati public. La classe così scritta viene interpretata correttamente anche dalla versione 4 dell'interprete Php, tuttavia non ha molto senso usarla se si dispone della versione 5 del Php. Meglio produrre codice aggiornato.
<?php/** * Description of Test * * @author maurizio */ // classe compatibile con Php4class Test { var $appo; // variabile attributo
//put your code here}?>
Fig. 20 – Classe Test.php
“Metodi magici”Per quanto riguarda i Setter e i Getter, esiste in Php5 un meccanismo interessante che consente di velocizzare un po' la scrittura di tali metodi: si tratta dei cosiddetti “magic methods” __set() e __get().
Facciamo un esempio riscrivendo la classe Studente vista in precedenza. Questa volta per il costruttore abbiamo usato il metodo “magico” __construct() (file Studente2.php)
Questa tecnica, che fa uso di un array associativo ($properties), consente di risparmiare davvero molte righe di codice se abbiamo molti attributi in una classe, tuttavia limita molto la leggibilità e la mantenibilità del codice nel tempo. Basta mettere a confronto le due classi Studente e Studente2. A voi comunque la scelta.