Capitolo 13. Classi ed Oggetti

Sommario
class

class

Una classe è una collezione di variabili e funzioni che ne fanno uso. Una classe viene definita utilizzando la seguente sintassi:


<?php
class Carrello {
    var $articoli;  // Articoli nel carrello della spesa
   
    // Aggiungi $num articoli di $artnr al carrello
 
    function aggiungi_articoli ($artnr, $num) {
        $this->articoli[$artnr] += $num;
    }
   
    // Elimina $num articoli di $artnr  dal carrello
 
    function rimuovi_articoli ($artnr, $num) {
        if ($this->articoli[$artnr] > $num) {
            $this->articoli[$artnr] -= $num;
            return true;
        } else {
            return false;
        }   
    }
}
?>
     

Ciò definisce una classe chiamata Carrello che consiste in un vettore associativo di articoli e di due funzioni per aggiungere e rimuovere gli articoli nel carrello stesso.

Le classi sono tipi, ovvero, sono schemi per variabili. Per utilizzarle occorre crearne una variabile istanza del tipo (classe) desiderato tramite l'operatore new.


 $carrello = new Carrello;
 $carrello->aggiungi_articoli("10", 1);
    

Questo codice crea un oggetto $carrello della classe Carrello. La funzione aggiungi_articoli() di questo oggetto è eseguita per aggiungere un articolo "10" al carrello.

Le classi possono essere estensioni di altre classi. La classe estesa o derivata possiede tutte le variabili e le funzioni della classe base oltre alle variabili e funzioni definite nell'estensione. Si ottiene ciò utilizzando la parola chiave extends. L'ereditarietà multipla non è supportata.


class Carrello_Personale extends Carrello {
    var $proprietario;
  
    function imposta_proprietario ($nome) {
        $this->proprietario = $nome;
    }
}
    

Questo codice definisce una classe Carrello_Personale che possiede tutte le variabili e funzioni della Carrello più la variabile proprietario e la funzione imposta_proprietario(). Creando una variabile istanza della classe Carrello_Personale è possibile impostare ed ottenere il nome del proprietario. È comunque possibile utilizzare le funzioni della classe Carrello nella classe Carrello_Personale:


$ncarrello = new Carrello_Personale;    // Creiamo un carrello personale
$ncarrello->imposta_proprietario ("kris"); // Imposta il nome del proprietario
print $ncarrello->proprietario;        // stampa il nome del proprietario del carrello
$ncarrello->aggiungi_articoli ("10", 1); // (funzionalità eredità dalla classe Carrello)
    

All'interno delle funzioni di una classe, la variabile $this significa questo oggetto. Per accedere ad una variabile o funzione chiamata prova, dall'interno dell'oggetto corrente bisogna utilizzare $this->prova.

I costruttori sono funzioni in una classe che sono eseguite automaticamente quando viene creata una nuova istanza della classe stessa. Una funzione diventa un costruttore quando è definita con lo stesso nome della classe.


class Auto_Carrello extends Carrello {
    function Auto_Carrello () {
        $this->aggiungi_articoli ("10", 1);
    }
}
    

Questo codice definisce una classe Auto_Carrello la quale è un Carrello più un costruttore il quale inizializza il carrello con un articolo numero "10" ogni volta che una nuova variabile istanza della Auto_Carrello è creata con "new". I costruttori possono anche avere argomenti, questi argomenti possono essere opzionali, caratteristica che li rende molto utili.


class Costruttori_Carrello extends Carrello {
    function Costruttori_Carrello ($articoli = "10", $num = 1) {
        $this->aggiungi_articoli ($articoli, $num);
    }
}
 
// Acquista le stesse vecchie cose.
 
$carrello_standard   = new Costruttori_Carrello;
 
// Acquista realmente...
 
$carrello_differente = new Costruttori_Carrello ("20", 17);
    

Cautela

Per le classi derivate, il costruttore della classe genitore non è eseguito automaticamente durante l'esecuzione del costruttore.