Per offrirti un'esperienza di navigazione sempre migliore, questo sito utilizza cookie propri e di terze parti, partner selezionati. I cookie di terze parti potranno anche essere di profilazione.
Le tue preferenze si applicheranno solo a questo sito web. Puoi modificare le tue preferenze in qualsiasi momento ritornando su questo sito o consultando la nostra informativa sulla riservatezza.
E' possibile rivedere la nostra privacy policy cliccando qui e la nostra cookie policy cliccando qui.
Per modificare le impostazioni dei cookies clicca qui
  • seguici su feed rss
  • seguici su twitter
  • seguici su linkedin
  • seguici su facebook
  • cerca

SEI GIA' REGISTRATO? EFFETTUA ADESSO IL LOGIN.



ricordami per 365 giorni

HAI DIMENTICATO LA PASSWORD? CLICCA QUI

NON SEI ANCORA REGISTRATO ? CLICCA QUI E REGISTRATI !

Le interfacce in PHP

di :: 01 dicembre 2022
Le interfacce in PHP

Le interfacce elencano tutti i metodi che le classi che le utilizzano devono implementare. Sono identificate dalla parola chiave "interface".

I metodi devono essere pubblici, e vengono solo elencati, non implementati nell'interfaccia.

In questo esempio di interfaccia, che chiamo "MyInterface", abbiamo 3 metodi pubblici.

interface MyInterface{
  public function getBody();
  public function getHeader();
  public function getFooter();
}

Creo quindi la classe "TemplateBaseHtml4" che implementa l'interfaccia "MyInterface": dovrà contenere obbligatoriamente i tre metodi dell'interfaccia, in assenza andrebbe in errore

class TemplateBaseHtml4 implements MyInterface {
	public function getBody(){
		echo "<div>Body HTML 4</div>";
	}
	public function getHeader(){
		echo "<div>Header HTML 4</div>";
	}
	public function getFooter(){
		echo "<div>Footer HTML 4</div>";
	}
}

Una classe che implementa una interfaccia è come se dicesse "guarda che tu puoi interfacciarti con me con questi metodi". Io implemento quindi tutti i metodi definiti in quella interfaccia

Creo quindi un'altra classe "TemplateBaseHtml5" che implementa la stessa interfaccia "iTemplate"

class TemplateBaseHtml5 implements MyInterface {
	public function getBody(){
		echo "<div>Body HTML 5</div>";
	}
	public function getHeader(){
		echo "<div>Header HTML 5</div>";
	}
	public function getFooter(){
		echo "<div>Footer HTML 5</div>";
	}
}

Mettiamo tutto il codice in uno script, ed istanziamo un oggetto di classe TemplateBaseHtml4 ed un oggetto di classe TemplateBaseHtml5

<?php

interface MyInterface {
  public function getBody();
  public function getHeader();
  public function getFooter();
}

class TemplateBaseHtml4 implements MyInterface {
	public function getBody(){
		echo "<div>Body HTML 4</div>";
	}
	public function getHeader(){
		echo "<div>Header HTML 4</div>";
	}
	public function getFooter(){
		echo "<div>Footer HTML 4</div>";
	}
}

class TemplateBaseHtml5 implements MyInterface {
	public function getBody(){
		echo "<div>Body HTML 5</div>";
	}
	public function getHeader(){
		echo "<div>Header HTML 5</div>";
	}
	public function getFooter(){
		echo "<div>Footer HTML 5</div>";
	}
}

$obj1=new TemplateBaseHtml4;
$obj1->getBody();
$obj1->getHeader();
$obj1->getFooter();

$obj2=new TemplateBaseHtml5;
$obj2->getBody();
$obj2->getHeader();
$obj2->getFooter();

?>

Le due classi implementano gli stessi metodi, ma che al loro interno differiscono perchè rendono valori diversi, per cui il risultato sarà

Body HTML 4
Header HTML 4
Footer HTML 4
Body HTML 5
Header HTML 5
Footer HTML 5

Creiamo adesso un'altra interfaccia "OtherInterface"

interface OtherInterface {
     public function getolocalizzazione();
}

Una classe può implementare più interfacce, basta elencarle dividendole con una virgola, come in questo esempio in cui ci interfacciamo anche con il metodo "geolocalizzazione"

<?php

interface OtherInterface{
     public function geolocalizzazione();
}

interface MyInterface{
     public function getBody();
     public function getHeader();
     public function getFooter();
}

class TemplateBaseHtml4 implements MyInterface,OtherInterface {
	public function getBody(){
		echo "<div>Body HTML 4</div>";
	}
	public function getHeader(){
		echo "<div>Header HTML 4</div>";
	}
	public function getFooter(){
		echo "<div>Footer HTML 4</div>";
	}
	public function geolocalizzazione(){
		echo "<div>localizzato</div>";
	}
}

$obj1=new TemplateBaseHtml4;
$obj1->getBody();
$obj1->getHeader();
$obj1->getFooter();
$obj1->geolocalizzazione();

?>

Il risultato sarà il seguente

Header HTML 4
Header HTML 4
Footer HTML 4
localizzato

Le classi visto nell'esempio implementano delle interfacce, ma in realtà possono anche estendere un'altra classe.

Ad esempio definiamo questa classe:

class TemplateStandard{
	public function test(){
		echo "test";
	}
}

Per estendere la classe "TemplateBaseHtml4" scriveremo:

class TemplateBaseHtml4 extends TemplateStandard implements MyInterface

Creiamo uno script così possiamo testarlo.

<?php

interface MyInterface {
     public function getBody();
     public function getHeader();
     public function getFooter();
}

class TemplateStandard{
	public function test(){
		echo "test";
	}
}

class TemplateBaseHtml4 extends TemplateStandard implements MyInterface {
	public function getBody(){
		echo "<div>Body HTML 4</div>";
	}
	public function getHeader(){
		echo "<div>Header HTML 4</div>";
	}
	public function getFooter(){
		echo "<div>Footer HTML 4</div>";
	}
}

$obj1=new TemplateBaseHtml4;
$obj1->test();
?>

La classe "TemplateBaseHtml4" avrà quindi accesso ai metodi della classe parent "TemplateStandard" e posso chiamare il metodo test.

Potrebbe interessarti

 
 
 
 
pay per script

Hai bisogno di uno script PHP personalizzato, di una particolare configurazione su Linux, di una gestione dei tuoi server Linux, o di una consulenza per il tuo progetto?

x

ATTENZIONE