Hallo zusammen,
ich bin PHP-Neuling und habe mich mal an ein Projekt gewagt, für das man sich einloggen muss. Dafür möchte ich die Facebook/Google/etc. APIs nutzen. Dazu habe ich eine abstrakte Klasse "User" angelegt:
Dann gibt es noch für jeden Dienst eine Klasse. Bsp: 'FacebookUser'
Da das Einloggen und das Überprüfen ob eine gültige Session besteht bei jeder API anders ist, soll jede Kind-Klasse die Funktionen:
-login() haben, die aufgerufen wird, sobald der Benutzer von der Google- bzw. Facebook-Login-Seite zurückgeleitet wird und das Feedback verarbeitet (schreibt beispielsweise das facebookSessionToken in das $_SESSION Array).
-getUser() habe, die überprüft ob eine gültige Session durch jeweilige API besteht und dann ggf. ein User-Objekt zurückgibt.
Frage:
Warum ist es in php nicht möglich eine statische Methode/Funktion abstract zu machen?
Gibt es hier einen anderen Lösungsweg, der ohne diese Methoden auskommt oder diese an anderer Stelle hat ?
danke
ich bin PHP-Neuling und habe mich mal an ein Projekt gewagt, für das man sich einloggen muss. Dafür möchte ich die Facebook/Google/etc. APIs nutzen. Dazu habe ich eine abstrakte Klasse "User" angelegt:
PHP-Code:
abstract class User{
/**
* wird immer augerufen, wenn der Benutzer eingeloggt sein muss und
* gibt entweder ein User-Objekt oder false zurück
*/
public static function requireLogin(){
/*die $_SESSION['service'] Variable wird beim login angelegt
* und enthät bsp.: 'google' oder 'facebook'
*/
if(isset($_SESSION['service']) && $_SESSION['service'] != '' ){
$classname = ucfirst($_SESSION['service']) . 'User';
if(method_exists($classname, 'getUser')){
return $classname::getUser();
}
return false;
}
return false;
}
abstract public static function login(); //loggt den Benutzer ein, gibt ein boolean zurück
abstract public static function getUser(); //gibt ein User-Object oder false zurück
//unwichtig für das Problem
abstract public function getFirstName();
abstract public function getLastName();
abstract public function getPictureUrl();
abstract public function getName();
abstract public function getLogoutUrl();
}
Da das Einloggen und das Überprüfen ob eine gültige Session besteht bei jeder API anders ist, soll jede Kind-Klasse die Funktionen:
-login() haben, die aufgerufen wird, sobald der Benutzer von der Google- bzw. Facebook-Login-Seite zurückgeleitet wird und das Feedback verarbeitet (schreibt beispielsweise das facebookSessionToken in das $_SESSION Array).
-getUser() habe, die überprüft ob eine gültige Session durch jeweilige API besteht und dann ggf. ein User-Objekt zurückgibt.
Frage:
Warum ist es in php nicht möglich eine statische Methode/Funktion abstract zu machen?
Gibt es hier einen anderen Lösungsweg, der ohne diese Methoden auskommt oder diese an anderer Stelle hat ?
danke
Kommentar