PHP/Programmazione/OOP: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
m Update syntaxhighlight tags - remove use of deprecated <source> tags
 
Riga 16:
Per creare una classe in PHP è sufficiente utilizzare la sintassi:
 
<sourcesyntaxhighlight lang=php>
class NomeClasse {
//qui dentro vanno inserite le variabili pubbliche (gli attributi) e private della classe
Riga 26:
 
} //qui finisce la dichiarazione della classe
</syntaxhighlight>
</source>
Il costruttore può essere anche una funzione con lo stesso nome della classe.
 
In questo modo è stata creata una classe NomeClasse. Per crearne una nuova instanza, sarà sufficiente scrivere:
 
<sourcesyntaxhighlight lang=php>$var = new NomeClasse ($parametri_del_costruttore) //instanzia un nuovo oggetto della classe NomeClasse</sourcesyntaxhighlight>
Con questa istruzione creiamo un nuovo oggetto dallo "stampino" NomeClasse; i parametri passati tra parentesi sono quelli richiesti dalla funzione <code>__construct</code> (se prevista).
<br/>Per accedere agli attributi o ai metodi della classe si userà la sintassi:
<sourcesyntaxhighlight lang=php>
$var->attributo = $a; //posso leggere o modificare gli attributi della classe
$b = $var->esempioMetodo(); //un metodo può restituire un valore
</syntaxhighlight>
</source>
 
Quando si lavora con le classi, la cosa più comoda è creare un file <code>class.NomeClasse.php</code> in cui inserire il codice della classe e poi richiamare tale file negli script in cui si desidera lavorare tramite l'istruzione <code>include_once</code>:
<sourcesyntaxhighlight lang=php>include_once("class.NomeClasse.php");</sourcesyntaxhighlight>
 
Per accedere all'attributo dall'interno della classe si usa <code>this</code>, per accedervi dall'esterno: "il nome dell'oggetto <code>-></code> e il nome del metodo":
<sourcesyntaxhighlight lang=php>
class prova{
private $a="mamma";
Riga 54:
$b=new prova();
$b->stampa();
</syntaxhighlight>
</source>
 
Come si vede la funzione stampa accede alla variabile privata a tramite la keyword <code>this</code> e <code>-></code>, si noti il <code>$</code> la keyword <code>this</code> diventa variabile e prende il <code>$</code> che non va applicato al nome della variabile privata!<br/>
Per accedere al metodo <code>stampa()</code> usiamo il costrutto: "il nome oggetto <code>-></code> e il nome metodo". Potremmo accedere anche ad una variabile della classe nello stesso modo (vedi ultima riga):
<sourcesyntaxhighlight lang=php>
class prova{
private $a="mamma";
Riga 76:
$variabile_privata=$b->get_var();
echo $b->c;
</syntaxhighlight>
</source>
 
se invece vogliamo ottenere la variabile privata, il metodo <code>get_var()</code> accede per noi alla variabile privata e ne restituisce il valore, che verrà salvato nella variabile <code>$variabile_privata</code>.
Riga 83:
Una classe può estenderne un'altra ereditandone così i metodi e gli attributi. La classe estesa si chiama ''superclasse'' ed è estesa da una ''sottoclasse''. La sottoclasse può sovrascrivere (''overriding'', da non confondere con l'[[w:Overloading|overloading]]) i metodi della superclasse definendone di propri, per estendere una classe è sufficiente, dopo il nome della classe estendente, mettere la parola chiave <code>extends</code> ed il nome della classe da estendere.
 
<sourcesyntaxhighlight lang=php>
class frutta{
public function visualizza(){
Riga 110:
$ciquita= new frutta();
$ciquita->visualizza();//visualizzerà questo è un frutto
</syntaxhighlight>
</source>
<br>
Come si vede il metodo <code>visualizza()</code> è sovrascritto dalle varie sottoclassi: pere e mele. Bisogna prestare particolare attenzione con gli indicatori di visibilità, come vedremo fra poco.
Riga 124:
Se si usa la dichiarazione deprecata di php<5: <code>var</code>, senza specificare l'ambito dell'attributo, questo avrà come ambito per default '''pubblico'''
 
<sourcesyntaxhighlight lang=php>
1 <?php
2 class prova{
Riga 159:
33
34 ?>
</syntaxhighlight>
</source>
<br>
Se decommentiamo (togliendo i caratteri "//") la riga 21, il motore php restituirà il seguente errore:<br>
Riga 176:
 
Una classe o un metodo si dichiarano astratti con la keyword <code>abstract</code>:
<sourcesyntaxhighlight lang=php>
abstract class prova {
public $var="ciao";
Riga 186:
echo "$var1 $var2";
}
</syntaxhighlight>
</source>
 
Bisogna mantenere inalterata la signature e cioè nome namespace parametri, si può cambiare solo la visibilità, restringendola. Una classe astratta '''non può essere istanziata direttamente'''.
Riga 195:
==Interfacce==
Le interfacce sono delle ulteriori astrazioni delle classi astratte. Vengono definite tramite la keyword <code>interface</code> seguita dal nome voluto per l'interfaccia e le graffe.
<sourcesyntaxhighlight lang=php>
interface miainterfaccia{
public function setName($name);
public function getName();
}
</syntaxhighlight>
</source>
 
In pratica è come dichiarare una classe astratta, con l'agevolazione di non dover dichiarare tutto <code>abstract</code>. Una classe che implementi tale interfaccia deve ridefinire tutti i metodi obbligatoriamente pena errore fatale, esattamente come per le classi astratte. Vediamo l'implementazione:
<sourcesyntaxhighlight lang=php>
class miaclasse implements miainterfaccia{
public $name;
Riga 215:
}
}
</syntaxhighlight>
</source>
 
Come per le classi astratte la classe implementante deve ridefinire tutti i metodi, preservando la signature tranne per l'ambito che può essere ristretto.
 
==Namespaces==
<sourcesyntaxhighlight lang="php">
<?php
namespace my\name;
Riga 232:
$d = new \globalClass;
?>
</syntaxhighlight>
</source>
 
[[Categoria:PHP|Programmazione orientata agli oggetti]]