1 of 84

Lato server: PHP

2 of 84

Programmazione lato server

Il tipo di programmazione web che abbiamo visto finora è detto “lato client” (client-side):

  • Il codice è eseguito dal browser sul computer dell’utente (client)

Passiamo alla programmazione lato server (server side)

  • Il codice è eseguito sul server per generare il contenuto delle pagine web trasmesse al client

3 of 84

Rivediamo come funzionano client e server nel web

4 of 84

CLIENT: l’utente inserisce l’URL sul browser

http://www.dieei.unict.it

5 of 84

Il browser invia una richiesta (HTTP GET) al server che si trova all’indirizzo http://www.dieei.unict.it

Guardiamo questo processo più in dettaglio

6 of 84

Il browser crea una richiesta (stringa di testo) formattata secondo la sintassi delle richieste HTTP

Il browser chiede al sistema operativo di inoltrare la richiesta a http://www.dieei.unict.it

HTTP Request

GET /index.html HTTP/1.1

Host: www.dieei.unict.it

Connection: keep-alive

Cache-Control: max-age=0

User-Agent: Mozilla/5.0

Accept: text/html, application/xhtml+xml

Accept-Encoding: gzip, deflate, sdch

Accept-Language: it-IT,en-US,en

7 of 84

Il sistema operativo esegue una ricerca DNS per reperire l’indirizzo IP di www.dieei.unict.it

Il server DNS comunica l’indirizzo IP, ad es. 151.97.240.10

  • DNS: Domain Name System: traduce un nome di dominio nell’indirizzo IP del computer associato a quel nome.
  • Indirizzo IP: identificativo numerico per ogni computer connesso a internet

DNS Server

(Routing, etc…)

8 of 84

Il sistema operativo apre una connessione TCP con il computer al 151.97.240.10

  • TCP: Transmission Control Protocol, definisce il formato di comunicazione affidabile attraverso la rete internet (usato da HTTP, FTP, ecc.)

Dopo aver stabilito la connessione TCP, attraverso essa il sistema operativo manda la richiesta HTTP al server

151.97.240.10

(Routing, etc…)

9 of 84

SERVER: Computer associato all’indirizzo 151.97.240.10

151.97.240.10

(Routing, etc…)

10 of 84

Su questo computer gira un programma chiamato web server:

  • Il web server ascolta i messaggi (le richieste HTTP) in ingresso…
  • …e risponde a queste richieste fornendo le informazioni necessarie.

151.97.240.10

11 of 84

"Server"

La definizione di server è un po’ ambigua:

  • A volte si intende la macchina (computer) su cui gira il software che ascolta e risponde alle richieste HTTP.
  • A volte si intende il software stesso che gira sulla macchina e risponde alle richieste HTTP.

In genere, si capisce dal contesto.

12 of 84

Socket

Cosa significa che un programma “ascolti” i messaggi in arrivo?

Quando il server (programma) è avviato, esegue del codice per aprire una socket e permettere la ricezione di messaggi di dalla rete (tramite il sistema operativo)

Una socket è un’estremità di un canale di comunicazione, attraverso la quale inviare e ricevere dati.

In ogni caso, il server web astrae tutto questo, quindi non c’è bisogno che ci poniamo il problema.

13 of 84

Tramite la connessione TCP stabilita tra il client e il server, entrambi possono scambiarsi messaggi.

151.97.240.10

(Routing, etc…)

Client

Server

14 of 84

151.97.240.10

Il sistema operativo trasmette al server web (programma) la richiesta ricevuta

15 of 84

Il server web analizza la richiesta HTTP e genera il messaggio da trasmetter al client (es. il contenuto di un file HTML). Formatta questo messaggio secondo la sintassi HTTP, quindi chiede al sistema operativo di inviarlo tramite HTTP al client.

151.97.240.10

16 of 84

La risposta HTTP arriva al sistema operativo del client, che la inoltra al browser, che visualizza la pagina web.

(Routing, etc…)

17 of 84

Riassunto

Quando aprite un URL:

  • Il browser crea una richiesta HTTP
  • Il sistema operativo invia la richiesta HTTP al server tramite TCP

Quando il server (computer) riceve il messaggio:

  • Il sistema operativo del server (computer) invia il messaggio al server (software)
  • Il software analizza il messaggio e crea la risposta HTTP
  • Il sistema operativo del server (computer) invia la risposta HTTP al client tramite TCP

Client

(Routing, etc…)

Server

18 of 84

Porte e binding

Porta: nel contesto delle reti, una porta rappresenta un’estremità di una connessione “logica” tra due computer

  • Valore da 0 a 65535 (intero unsigned a 16-bit)

Quando è avviato il processo server, questo dice al sistema operativo su quale porta ascolta: questa operazione è chiamata binding.

19 of 84

Il sistema operativo del client apre una connessione TCP verso la porta 80 �del computer al

151.97.240.10.

Una connessione TCP richiede l’indirizzo IP e il numero di porta.

  • Se non è specificato il numero di porta, la porta di default per le richieste HTTP è 80.

Il processo server ascolta sulla porta 80 �in attesa di richieste.

151.97.240.10

(Routing, etc…)

20 of 84

Porte di default

Ci sono diverse porte di default utilizzate la protocolli particolari:�

21: File Transfer Protocol (FTP)

22: Secure Shell (SSH)

23: Telnet remote login service

25: Simple Mail Transfer Protocol (SMTP)

53: Domain Name System (DNS) service

80: Hypertext Transfer Protocol (HTTP)

110: Post Office Protocol (POP3)

119: Network News Transfer Protocol (NNTP)

123: Network Time Protocol (NTP)

143: Internet Message Access Protocol (IMAP)

161: Simple Network Management Protocol (SNMP)

194: Internet Relay Chat (IRC)

443: HTTP Secure (HTTPS)

21 of 84

Localhost

Se sul nostro computer gira un server web, possiamo inviargli una richiesta HTTP utilizzando l’URL:

http://localhost:portNumber, ad esempio

http://localhost:3000

Localhost è un nome di host che vuol dire “questo computer”

22 of 84

Server locale

Nei precedenti esempi client/server abbiamo sempre considerato due macchine separate:

Quando eseguiamo il server localmente, il nostro computer funge sia da client che da server.

Client

(Routing, etc…)

Server

23 of 84

Server “reali”

La configurazione dei server “reali” è in genere come segue:

  • I server girano su macchine dedicate che eseguono solo il software del server
  • I computer dei server eseguono sistemi operativi ottimizzati per il software del server web
  • Vi sono macchine server di backup in caso di guasti (crash software; black-out; guasti hardware; etc.)
  • Vi sono più macchine che eseguono programmi server identifici, per siti ad alto traffico
    • Ogni computer può ricevere un certo numero di richieste alla volta (più o meno 1,000-10,000); per riceverne di più, servono più macchine.

24 of 84

fetch() a localhost

Riceviamo un errore CORS:

Se cerchiamo di accedere a localhost tramite fetch:

25 of 84

CORS

CORS: Cross-Origin Resource Sharing (wiki)

  • Richiesta cross-origin: richiesta verso una risorsa su un server/protocollo diverso da quello che ha fornito la pagina web
    • Es. apriamo un file HTML tramite file:// e cerchiamo di accedere a http://localhost via JavaScript

Il browser di default impedisce richieste cross-origin per fetch() e AJAX in generale (ok per immagini e CSS)

È possibile configurare il server web per permettere richieste CORS.

26 of 84

PHP

27 of 84

Pagine web statiche

Vantaggi:

  • Facili da creare
    • Esistono software WYSIWYG per la generazione di pagine web
      • Non richiedono conoscenze di HTML/CSS
  • Generazione della risposta: lettura da file

Svantaggi:

  • Interazione utente limitata alla lettura di documenti dal web (non all’invio di dati al server)
  • Poco pratiche se le informazioni devono essere aggiornate frequentemente

28 of 84

Pagine web dinamiche

Generate in funzioni di:

  • Richieste inviate dall’utente
  • Contenuto di un database
  • Geo-localizzazione
  • ecc.

Vantaggi:

  • Generazione automatica in caso di contenuti variabili

Svantaggi:

  • Progettazione e programmazione più complessa
  • Generazione della pagina più costosa in termini di tempo e risorse

29 of 84

Applicazioni web

Il server web non è più un semplice fornitore di dati predefiniti, ma una vera e propria applicazione.

Il lato client definisce il front-end, l’interfaccia grafica e la modalità di interazione con l’utente.

Il lato server definisce il back-end, la business logic dell’applicazione, il suo funzionamento in termini di gestione, processamento e trasmissione delle informazioni.

30 of 84

PHP

PHP è un linguaggio di scripting open-source utilizzato per la programmazione server-side.

È probabilmente il più diffuso linguaggio per la programmazione server-side, insieme a JavaScript (NodeJS), C# (Asp.net), Java (Java Server Pages), Ruby, Python

In genere è utilizzato insieme al server web Apache.

31 of 84

PHP

Vantaggi:

  • Disponibile per molte piattaforme
    • Hardware (Intel, Sparc, Mac, ecc.)
    • Sistema operativo (Linux, Unix, Windows, ecc.)
    • Web server (Apache, IIS, ecc.)
  • Portabile
    • Linguaggio interpretato
  • Supporto nativo a diversi DBMS
    • MySQL
    • PostgreSQL
    • Oracle
    • ecc.

32 of 84

PHP

Come funziona?

Uno script in PHP consiste in un file .php, che viene processato dall’interprete PHP.

Di per sé, PHP può essere utilizzato come linguaggio di scripting «normale» (es. Python, Perl).

In un web server, un file .php rappresenta una pagina web (un po’ come abbiamo usato .html finora)

Piuttosto che ritornare direttamente il file come risposta HTTP, il server esegue l’interprete PHP sul file e ritorna l’output dell’interprete.

33 of 84

PHP

Come funziona?

Quando viene richiesto un file .php, il server web analizza il file alla ricerca di tag <?php …………… ?>

Il contenuto dei tag è passato all’interprete PHP, e l’output dell’interprete viene inserito al posto dei tag.

In genere, i file .php contengono un misto di HTML e PHP.

  • L’HTML definisce la struttura generale della pagina
  • Il PHP inserisce i contenuti dinamici

34 of 84

PHP

Come funziona?

NON potete aprire dal browser file PHP allo stesso modo di come avete fatto finora con i file HTML!

Il browser non esegue l’interprete PHP, quindi tratta il file come se fosse un semplice file di testo.

35 of 84

PHP

Come funziona?

NON potete aprire dal browser file PHP allo stesso modo di come avete fatto finora con i file HTML!

Dovete necessariamente passare attraverso il server web.

36 of 84

PHP

  • Primo Esempio

37 of 84

PHP: Tag

  • Il codice PHP può essere posizionato in qualsiasi punto della pagina html
  • Deve essere racchiuso fra tag
  • Tag Standard <?php ... ?>

Es.: Primo.php

38 of 84

PHP: Linguaggio

  • Commenti

39 of 84

PHP: Variabili

  • Una variabile è
    • “un simbolo o un nome che rappresenta un valore”
    • sempre preceduta dal simbolo $
  • Una variabile può rappresentare diversi tipi di valore
    • numero intero, numero reale, carattere, …
  • Non è necessario dichiarare le variabili:
    • il nome viene dichiarato automaticamente al primo utilizzo
    • il tipo di dato può cambiare durante l’esecuzione del programma

40 of 84

PHP: Variabili

  • Quando un programma viene eseguito le variabili sono sostituite da dati reali
    • lo stesso programma può così elaborare diversi insiemi di dati
  • Oltre alle variabili esistono le costanti
    • una costante ha un valore che non cambia mai

41 of 84

PHP: Variabili

  • Gli assegnamenti si fanno con =, per es:

$var= 5;

  • Tramite l’operazione di assegnazione si associa un valore ad una variabile
    • variabile = valore

$today = “oggi”;

    • variabile = variabile

$today = $yesterday;

    • variabile = espressione

$today = $today + 3;

42 of 84

PHP: Case sensitive

  • Keywords (e.g. if, else, while, echo, etc.), classi, funzioni non sono case-sensitive

<!DOCTYPE html><html><body>��<?phpECHO "Benvenuti alla lezione di PHP!<br>";�echo "Benvenuti alla lezione di PHP!<br>";�EcHo "Benvenuti alla lezione di PHP!<br>";�?>��</body></html>

43 of 84

PHP: Case sensitive

  • Nomi delle variabili invece SI’!

<!DOCTYPE html><html><body>��<?php�$argomento = “PHP";�echo "Benvenuti alla lezione di " . $argomento . "<br>";�echo "Benvenuti alla lezione di " . $ARGOMENTO . "<br>";�echo "Benvenuti alla lezione di " . $arGOmento . "<br>";�?>��</body></html>

44 of 84

PHP: Tipi di dato

  • Il tipo della variabile non viene dichiarato esplicitamente, ma definito implicitamente al primo assegnamento:

$var = 5; var è di tipo Integer

  • PHP converte automaticamente i tipi durante l'esecuzione (quando possibile)

- Loosely Typed Language

45 of 84

PHP: Conversioni di tipo

$a = 10; //$a è una variabile intera e vale 10

$b = $a * 1.5; // $b è float e vale 15.0

$c = "5+$b" ; // $c è stringa e vale “5+15”

$d = 10.8 ; // $d è float e vale 10.8

$d = (int)$d ; // adesso $d è intera e vale 10

46 of 84

PHP: Apici

<?

$nome = "Anna";

echo = " Ciao $nome ! " ;

echo "<BR><BR>";

echo = ' Ciao $nome ! ' ;

?>

  • dentro ai doppi apici (") la variabile viene valutata!
  • dentro agli apici semplici (') la variabile non viene valutata!

47 of 84

PHP: Scope

  • PHP ha tre tipi di “visibilità” (scope) per le variabili:
    • locale
    • globale
    • statica
  • Una variabile dichiarata fuori da una funzione ha visibilità solo al di fuori delle funzioni

<?php$x = 5// variabile globale�function Funzione() {    // se si usa x otteniamo un errore�    echo "<p>La variabile x vale: $x</p>";Funzione();��echo "<p>La variabile x vale: $x</p>";?>

 

48 of 84

PHP: Scope

  • PHP ha tre tipi di “visibilità” (scope) per le variabili:
    • locale
    • globale
    • statica
  • Una variabile dichiarata dentro una funzione ha visibilità solo all’interno della funzione

<?phpfunction Funzione() {    $x = 5// visibilità locale�    echo "<p>La variabile x vale: $x</p>";Funzione();��// x fuori dalla funzione genera un errore�echo "<p>La variabile x vale: $x</p>";?>

 

49 of 84

PHP: Scope

  • Keyword: global
  • Utilizzata per accedere a una variabile globale da una funzione.

<?php$x = 5;$y = 10;��function Funzione() {    global $x, $y;    $y = $x + $y;}��Funzione();echo $y; // Uscita = 15�?>

 

50 of 84

PHP: Scope

  • PHP memorizza anche tutte le variabili globali in un array chiamato $GLOBALS[indice]. L'indice contiene il nome della variabile.

 

<?php$x = 5;$y = 10;��function Funzione() {    $GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];��Funzione();echo $y; // Uscita = 15�?>

51 of 84

PHP: Scope

  • Keyword: static
    • Quando una funzione è completata / eseguita, tutte le sue variabili vengono cancellate. Tuttavia, a volte vogliamo che una variabile locale NON venga cancellata.

<?phpfunction Funzione() {    static $x = 0;    echo $x;    $x++;}��Funzione();Funzione();Funzione();?>

 

52 of 84

PHP: Stampa uscita

  • In PHP ci sono due modi fondamentali per ottenere output: echo e print.
    • Differenza: l'echo non ha valore di ritorno mentre la print ha un valore di ritorno di 1�

<?phpecho "<h2>PHP è divertente!</h2>";echo "Ciao Mondo!<br>";echo "Imparare PHP!<br>";echo "Questa""stringa""è""fatta""con più parametri.";?>

<?php$txt1 = "Imparare PHP";$txt2 = "Web Programming 2025";$x = 5;$y = 4;��echo "<h2>" . $txt1 . "</h2>";echo "Studiare PHP at " . $txt2 . "<br>";echo $x + $y;?>

53 of 84

PHP: Stampa uscita

  • In PHP ci sono due modi fondamentali per ottenere output: echo e print.
    • Differenza: l'echo non ha valore di ritorno mentre la print ha un valore di ritorno di 1�

<?phpprint "<h2>PHP è divertente!</h2>";print "Ciao Mondo!<br>";print "Imparare PHP!<br>";?>

<?php$txt1 = "Imparare PHP";$txt2 = "Web Programming 2025";$x = 5;$y = 4;��print "<h2>" . $txt1 . "</h2>";print "Studiare PHP at " . $txt2 . "<br>";print $x + $y;?>

54 of 84

PHP: print_r

  • print_r informazioni “human-readable” su una variabile

print_r(var_name, return_output)

var_name: nome della variabile

return_output: memorizzare l’ouput in una variable

<?php�$a = array ('a' => 'apple''b' => 'banana''c' => array ('x''y''z'));�print_r ($a);�?>

Array

(

[a] => apple

[b] => banana

[c] => Array

(

[0] => x

[1] => y

[2] => z

)

)

55 of 84

PHP: Stringhe

  • Sulle stringhe è possibile definire diverse funzioni

<?phpecho strlen("Web Programming!"); // Uscita: 16�?>

<?phpecho str_word_count("Web Programming!"); // Uscita: 2�?>

strlen:

lunghezza stringa

str_word_count :

Numero parole

<?phpecho strrev("Web Programming!"); // Uscita: !ngimmargorP beW�?>

strrev :

Invertire stringa

<?phpecho strpos("Web Programming!""Programming"); //Uscita: 5�?>

strpos:

Cercare stringa

str_replace:

Cercare stringa

<?phpecho str_replace("Web""C""Web Programming!"); // Uscita: C Programming!�?>

56 of 84

PHP: Stringhe

57 of 84

PHP: Operatori

58 of 84

PHP: if...elseif....else

if (condition) {    code to be executed if this condition is true;�} elseif (condition) {    code to be executed if this condition is true;�} else {    code to be executed if all conditions are false;�}

<?php$t = date("H");��if ($t < "10") {    echo “Buongiorno!";elseif ($t < "20") {    echo “Buon pomeriggio!";else {    echo “Buona notte!";}?>

59 of 84

PHP: for e foreach

for (init counter; test counter; increment) {    code to be executed;}

<?php for ($x = 0; $x <= 10; $x++) {    echo “Il numero e’ : $x <br>";?>

foreach ($array as $value)

{    code to be executed;}

<?php $colori = array("rosso","verde","blue"); ��foreach ($colori as $valore) {    echo "$valore <br>";}?>

  • foreach funziona solo sugli array e serve per iterate per ogni coppia chiave-valore dell’array

60 of 84

PHP: Array

  • Un array è:
    • un insieme ordinato e omogeneo di dati
    • ogni dato in un array è chiamato elemento dell’array (array element) ed è individuato da un indice
  • Per creare un array:

array();

61 of 84

PHP: Array

  • Tre tipi di array
    • Array indicizzati - Array con indice numerico
    • Array associativi - Array con chiavi nominate
    • Array multidimensionali - Array che contengono altri array

62 of 84

PHP: Array

  • Tre tipi di array
    • Array indicizzati - Array con indice numerico

<?php$cars = array("Volvo""BMW""Toyota");echo “Mi piacciono " . $cars[0] . ", " . $cars[1] . " e" . $cars[2] . ".";?>

Per sapere quanti elementi ha un array:

$lungh = count($lista);

<?php$cars = array();

$cars[0] = "Volvo";$cars[1] = "BMW";$cars[2] = "Toyota";

echo  "Mi piacciono " . $cars[0] . ", " . $cars[1] . " e" . $cars[2] . ".";?>

<?php$cars = array("Volvo""BMW""Toyota");$arrlength = count($cars);��for($x = 0; $x < $arrlength; $x++) {    echo $cars[$x];    echo "<br>";}?>

63 of 84

PHP: Array

  • Tre tipi di array
    • Array associativi - Array con chiavi nominate

<?php$age = array("Pietro"=>"35""Franco"=>"37"

"Luca"=>"43");

echo "Pietro ha" . $age['Pietro'] . " anni.";

?>

<?php$age = array();

$age['Pietro'] = "35";

$age['Franco'] = "37";

$age['Luca'] = "43";

echo "Pietro ha" . $age['Pietro'] . " anni.";

?>

<?php$age = array("Pietro"=>"35""Franco"=>"37""Luca"=>"43");��foreach($age as $x => $x_value) {    echo "Key=" . $x . ", Value=" . $x_value;    echo "<br>";}?>

64 of 84

PHP: Array

  • Tre tipi di array
    • Array multidimensionali - Array che contengono altri array

$cars = array  (  array("Volvo",22,18),  array("BMW",15,13),  array("Saab",5,2),  array("Land Rover",17,15)  );

<?phpfor ($row = 0; $row < 4; $row++) {  echo "<p><b>Riga numero $row</b></p>";  echo "<ul>";  for ($col = 0; $col < 3; $col++) {    echo "<li>".$cars[$row][$col]."</li>";  }  echo "</ul>";}?>

65 of 84

PHP: Ordinamento array

  • sort() - ordinamento crescente
  • rsort() - ordinamento decrescente
  • asort() - ordinamento di array associativi in ordine crescente sulla base del valore
  • ksort() - ordinamento di array associativi in ordine crescente sulla base della chiave
  • arsort() - ordinamento di array associativi in ordine decrescente sulla base del valore
  • krsort() - ordinamento di array associativi in ordine decrescente sulla base della chiave

66 of 84

PHP: Ordinamento array

<!DOCTYPE html><html><body>��<?php�$age = array("Pietro"=>"35""Franco"=>"37""Luca"=>"43");�ksort($age);��foreach($age as $x => $x_value) {�    echo "Key=" . $x . ", Value=" . $x_value;�    echo "<br>";�}�?>��</body></html>

Key=Franco, Value=37

Key=Luca, Value=43

Key=Pietro, Value=35

67 of 84

PHP: Ordinamento array

<!DOCTYPE html><html><body>��<?php�$age = array("Pietro"=>"35""Franco"=>"37""Luca"=>"43");�asort($age);��foreach($age as $x => $x_value) {�    echo "Key=" . $x . ", Value=" . $x_value;�    echo "<br>";�}�?>��</body></html>

Key=Pietro, Value=35

Key=Franco, Value=37

Key=Luca, Value=43

68 of 84

PHP: Funzioni

  • Definizione
    • "Creo" la nuova funzione

  • Chiamata
    • "Eseguo" la funzione

I nomi delle funzioni non sono “case-sensitive.”

69 of 84

PHP: Funzioni

  • Valore di default per argomenti

<?phpfunction setHeight($minheight = 50) {    echo “L’altezza e’ : $minheight <br>";}��setHeight(350);setHeight(); // Usa il valore di default e’ 50�setHeight(135);setHeight(80);?>

70 of 84

PHP: classi

  • PHP è un linguaggio orientato agli oggetti
  • Una classe può contenere:
    • Costanti
    • Variabili («proprietà»)
    • Funzioni («metodi»)

71 of 84

PHP: classi

Proprietà e metodi possono essere public, protected o private

Stesso significato di Java/C++:

  • public: accessibile dall’esterno
  • protected: accessibile dalla classe e dalle sottoclassi
  • private: accessibile dalla classe

72 of 84

PHP: classi

Per le proprietà, non si specifica il $ dopo ->, a meno di voler accedere a una proprietà il cui nome è contenuto in una variabile:

$prop = ‘id’;

$this->$prop = 1; // Equivale a $this->id = 1

$this all’interno di un metodo identifica l’oggetto su cui il metodo è chiamato

Per accedere a una proprietà o ad un metodo tramite $this si usa la sintassi -> (come per i puntatori in C)

73 of 84

PHP: creazione oggetti

  • Un oggetto è creato con la parola chiave new

Se non è necessario passare parametri al costruttore, le parentesi possono essere omesse

74 of 84

PHP: creazione oggetti

  • Un oggetto è creato con la parola chiave new

Il nome della classe può essere contenuto in una variabile, per creare oggetti di un tipo definito dinamicamente

75 of 84

PHP: ereditarieta’

Una classe può ereditare proprietà e metodi di un’altra classe tramite la parola chiave extends

76 of 84

PHP: ereditarieta’

Dichiarazione della classe derivata

Nota: PHP non supporta ereditarietà multipla

77 of 84

PHP: ereditarieta’

Overriding della funzione:

ridefinisco un metodo della classe base

78 of 84

PHP: ereditarieta’

Tramite parent:: è possibile accedere alle proprietà/metodi overidden della classe base

79 of 84

PHP: costruttori e distruttori

  • PHP implementa il meccanismo di costruttori e distruttori:
  • Costruttore: __construct()
    • Nota: doppio underscore
    • Viene chiamato quando l’oggetto è creato
  • Distruttore: __destruct()
    • Viene chiamato quando non esistono più riferimenti
    • Es. se l’oggetto internamente apre connessioni a database, file, ecc., è buona prassi chiuderle nel distruttore

80 of 84

PHP: costruttori e distruttori

  • È possibile invocare il costruttore della classe base tramite parent::__construct
    • Come se fosse un qualunque altro metodo overidden

81 of 84

PHP: autoload

  • In genere, è buona norma definire ciascuna classe in un file a sé stante.
  • Lo svantaggio è dover poi aggiungere allo script un’istruzione include/require per ogni classe.
  • Soluzione: autoload

82 of 84

PHP: autoload

Funzione per il supporto all’autoload

83 of 84

PHP: autoload

Tradotto: «Quando uno script cerca di istanziare una classe indefinita $class_name, carica il file $class_name. ‘.php’

84 of 84

PHP: autoload

In questo caso, carica MyClass1.php

In quest’altro, carica MyClass2.php