Io non sono un esperto ma...
Codice PHP:
<?php
//************** CIO' CHE RIUSI ********************
//Punto primo --> Definire l'inerfaccia di un ipotetico tipo reindirizzamento
abstract class aRedirect{
//Associare un url (string) ad un caso (string)
public function AddLocation($url,$case);
//Valutato il caso provoca il redirect all'url
public function Redirect($case);
}
//Punto secondo --> Realizziamo un tipo redirect concreto ma riusabile basato
// su header()
class cHeaderRedirect extends aRedirect{
private $redirect=array();
public function AddLocation($url,$case){
$this->redirect[$event]=urlencode($url);
}
public function Redirect($case){
if(isset ($this->redirect[$case])){
header("Loction: {$this->redirect[$case]}");
exit;
}else
return false;
}
}
//Punto terzo --> Definiamo un ipotetico tipo che ralizzi il redirect
abstract class aRedirector{
//Impedisco che vengano create istanze delle sottoclassi di questa calsse
private function __construct(){}
public static function RedirectOn($event);
}
//******************* FINE DI CIO' CHE RIUSI ***********************
//Questo è un esempio di implementazione per la tua applicazione specifica
class LogInRedirector extends aRedirector{
const kHome="home";
const kLogIn="log in";
const kRegistration="registration";
public static function RedirectOn($event){
$product=new cHeaderRedirect();// o una qualunque classe estenda aRedirect
$product->AddLocation("index.php", self::kHome);
$product->AddLocation("login.php", self::kLogIn);
$product->AddLocation("register.php", self::kRegistration);
return $product->Redirect($event);
}
}
//Questo è un altro esempio di implementazione per la tua applicazione specifica
class ErrorRedirector extends aRedirector{
public static function RedirectOn($event){
$product=new cHeaderRedirect();// o una qualunque classe estenda aRedirect
$product->AddLocation("error.php", "error");
return $product->Redirect("error");
}
}
//Esempio di utilizzo
//vedi tu da dove catturare $event, il così detto evento, che sarà una stringa
LogInRedirector::RedirectOn($event) or ErrorRedirector::RedirectOn($event) or die("sono nei guai!");
?>
C'è di meglio in giro, ma cosa ho fatto?
Ho ipotizzato un generico tipo redirect, tramite classe astratta aRedirect, da cui discende la classe concreta che implementa la classe astratta tramite header().
Ho quindi ipotizzato un generico tipo Redirector,tramite classe astratta aRedirector, da cui possono discendere varie implementazioni specifiche di redirector.
In questo modo ogni elemento è indipendente dall'altro ovvero i tuoi script possono utilizzare indifferentemente qualcunque calsse estenda (implementi l'interfaccia dichiarate nella classe astratta) aRedirector. Dal canto loro i Redirector concreti, sottoclassi di aRedirector possono implementare come meglio credono la ridirezione utilizzando una delle sottoclassi concrete della classe astratta aRedirect.