Introduzione alle classi ed agli oggetti in PHP
Classi ed oggetti.
Quando si parla di linguaggio ad oggetti, in qualsiasi ambito, viene spontaneo chiedersi che cosa possa significare un oggetto in informatica. Nella vita comune un oggetto è un qualcosa che ha delle proprietà, come ad esempio il colore, la forma, le dimensioni, e con il quale è possibile compiere una o più azioni. L'esempio tipico di oggetto è quello di una autovettura. Questa ha delle proprietà che possono, ad esempio, essere il colore, la marca, il modello, il tipo di motore. L'autovettura, inoltre, ha dei metodi con il quale è possibile modificare qualcosa del suo stato. Il metodo accellera, ad esempio la fa avanzare, il metodo frena le fa perdere velocità e via dicendo.
Quanto appena detto ha significato nella realtà ma, in informatica, cosa significa il termine oggetto? La stessa cosa! Un oggetto informatico non è altro che un costrutto virtuale, definito da una classe, al quale possono essere assegnati dei valori (proprietà) o delle azioni (metodi). Il codice di scrittura di un oggetto prende il nome di classe proprio perchè identici oggetti facenti parte della stessa classe hanno medesime proprietà, sebbene con diversi valori, e medesimi metodi. Vediamo un esempio.
| La classe "autovettura" | ||
| Nome | Tipo | Descrizione |
| Velocità massima | valore | La velocità massima raggiungibile dall'autovettura |
| Velocità corrente | valore | La velocità corrente dell'autovettura |
| Tipo di motore | valore | Che tipo di motore ha? Benzina o diesel? |
| Marca | valore | Che marca di autovettura? |
| Accellera | metodo | Aumenta la velocità corrente |
| Frena | metodo | Diminuisce la velocità corrente |
Le classi in PHP
PHP è un linguaggio orientato agli oggetti e per questo motivo, mediante l'uso di classi, rende possibile utilizzare le funzionalità di metodi e proprietà appena descritte. Il costrutto è abbastanza semplice e prevede l'inserimento della keyword "class" seguita dal blocco in parentesi graffe.
Un semplice esempio di classe.
<?php
class MiaClasse{
// Qui va il codice della classe
}
?>
Con il semplice esempio di sopra abbiamo definito la classe MiaClasse che, adesso, esiste nel nostro script.
Istanziare le classi.
Una volta scritto il codice della classe è comodo poter disporre di un oggetto per utilizzare i metodi e le proprietà. Per fare questo è possibile assegnare ad una qualsiasi variabile la valenza di oggetto con il semplice codice.
<?php
$oggetto = new Classe;
// Adesso $oggetto è un oggetto le cui peculiarità sono definite nel codice
// di classe MiaClasse
class MiaClasse{
// Qui va il codice della classe
}
?>
Proprietà e metodi della classe.
A livello di codice della classe, ovvero tra le parentesi graffe, è possibile inserire sia le proprietà che i metodi. Le proprietà sono delle variabili mentre i metodi sono delle funzioni. Vediamo com'è possibile fare una classe per l'ipotetica autovettura sopra proposta. Il costrutto $this-> serve ad identificare, all'interno della classe, si i metodi che le variabili della classe stessa.
<?php
class Autovettura{
// Seguono le proprietà;
Public $vel_max ;
Public $vel_curr = 0; // Assegna automaticamente un valore
Public $motore;
Public $marca;
Function Accellera($valore){
// Accellera se la velocità massima non
// e' stata raggiunta. Si noti il simbolo del
// Punto esclamativo che sta ad indicare
// la negazione logica (not)
if (!$this->vel_max >== $this->vel_curr){
$this->vel_curr = $this->vel_curr + $valore;
}
}
Function Frena ($valore){
// Decelera se la velocità corrente non
// e' uguale a zero.
if (!$this->vel_curr == 0){
$this->vel_curr = $this->vel_curr - $valore;
}
// Controlla se, dopo la decelerazione, l'autovettura ha assunto un valore negativo
if ($this->vel_curr == 0){
$this-vel_curr = 0;
}
}
?>
A questo punto la classe può essere istanziata ed ogni riferimento può essere utilizzato dall'oggetto appena creato.
{geshi lang="php"}<?php
// Codice della classe Autovettura non riportato
// Istanzia l'oggetto
$autovettura = new autovettura;
// Definisce la proprietà vel_max$autovettura .
$autovettura->vel_max = 180;
// Accellera di 30
$autovettura->accellera(30)
// Adesso $autovettura->vel_curr è uguale a 30;
//frena di 20
$autovettura->frena(20)
// Adesso $autovettura->vel_curr è uguale a 10;
?>