Redazione
a- a+

Passaggio di parametri ed oggetti alle funzioni

Vediamo come avviene il passaggio di parametri ed oggetti alle funzioni con la metodologia a oggetti di PHP5. Esempi e codici.

Nella metodologia a oggetti i passaggi dei parametri alle funzioni possono avvenire o per valore o per riferimento. Nel passaggio per valore, o anche detto per copia se si passa un oggetto a una funzione, viene creato un nuovo oggetto temporaneo, che è proprio la copia dell’oggetto passato, ed è su questo che la funzione lavora. Ma qui possono sorgere dei problemi, in quanto se l’oggetto ha una dimensione molto grande, la sua copia impiegherà molto tempo a essere creata e in più ci ritroveremo in memoria due oggetti uguali con la stessa dimensione, con la conseguenza di uno spreco di memoria.

Nel PHP 5 gli oggetti vengono passati solo per reference (riferimento). Il passaggio per riferimento non effettua una copia dell’oggetto, ma viene inoltrato alla funzione un indirizzo della posizione dell’oggetto in memoria. La funzione lavora direttamente sull’oggetto originale, con un notevole miglioramento delle prestazioni e nessuno spreco di memoria. Tutto questo discorso vale anche per i valori di ritorno. Se la variabile da ritornare è un tipo primitivo viene effettuata una copia della variabile da ritornare. Gli oggetti invece vengono fatti ritornare sempre per riferimento, migliorando le performance. Se volessimo passare per riferimento anche variabili di tipi primitivi basterebbe aggiungere, all’interno della dichiarazione della funzione, il carattere & prima del nome del parametro che vogliamo passare. Ecco l’esempio.

<?php 
// Passaggio per riferimento 
function incremento(&$num){ 
$num ++; 
return $num; 
} 
$numero = 3; 
incremento($numero); 
echo $numero; // Stampa 4; 
?> 

Se si vuole forzare anche il ritorno di tipi primitivi per riferimento basta aggiungere & prima del nome della funzione. Ecco quindi come si modifica la funzione appena definita:

<?php 

// Passaggio per riferimento 
function incremento(&$num){ 
$num ++; 
return $num; 
} 
?> 

Infine dobbiamo parlare di due metodi particolari che tutte le classi hanno: il costruttore e il distruttore. Questi due metodi li abbiamo visti nei capitoli precedenti di questa guida. Un costruttore è un metodo che deve avere esattamente questo nome: “_construct” e viene eseguito ogni volta che si crea un nuovo oggetto. Può ricevere dei parametri che servono di solito a inizializzare i valori delle proprietà interne dell’oggetto che si sta creando.

A questo punto abbiamo tutti gli elementi di una classe e non ci resta che creare un oggetto che sia istanza della classe che abbiamo intenzione di creare:

$oggetto= new nome classe(parametri del costruttore);

esempio:

$utente=new persona(“Mario”);

viene creato l’oggetto $utente istanza della classe persona attraverso il costrutto new che rappresenta lo strumento per creare un nuovo oggetto. Poiché la nostra ipotetica classe persona è dotata di un costruttore, dobbiamo immaginare di avere all’interno della casse un metodo con lo stesso nome della classe e che accetti gli stessi parametri del costruttore. Inoltre necessita che passiamo i parametri per la costruzione e l’inizializzazione dell’oggetto direttamente al nome della classe che stiamo creando con il costrutto new. L’esecuzione di questa istruzione consente di creare un nuovo oggetto $utente che sia istanza della classe persona. Al costruttore della classe passiamo anche il parametro che ci viene richiesto, cioè la stringa “Mario”. Dopo l’esecuzione abbiamo in memoria il nostro oggetto e possiamo utilizzarlo come vogliamo; in particolare, possiamo stampare il nome della persona. Per questa operazione si usa la seguente sintassi:

$utente->getName();

Come si può vedere, la sintassi di accesso ai metodi è analoga a quella che serve per accedere direttamente a un proprietà della classe: si utilizza l’operatore freccia (->).

Se nel nostro script avessimo la necessità di accedere in scrittura alla variabile $name, dovremmo definire il seguente metodo:

public function setName($nome)
{
$this->name=$nome;
}

E potremmo utilizzarlo dall’interno dello script attraverso il seguente codice:

$utente=new persona(“Mario”);
$utente->setName(“Marco”);
print($utente->getName());

che stamperebbe a video il nome: “Marco”.



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Graziano
Hai qualche domanda da fare?