Erweiterbare "User" Klasse
Moinsen,
ich hatte vor kurzer Zeit die Idee, eine Art Klassenbibliothek für Retro Hotels zu erstellen.
Da ich etwas faul bin, habe ich bisher nur die User Klasse fertiggestellt.
Diese ist, aufgrund eines eigenprogrammierten Plugin-Systems, vollkommen erweiterbar.
Da ich eine Klassenbibliothek erstellen wollte, existiert auch noch eine Factory Klasse, damit man nicht immer die MySQLi-Klasse als Parameter übergeben muss.
Funktionen:
Spoiler anzeigen
Ein neues "User" Objekt erstellen
Eine Spalte des Benutzers ausgeben (In dem Fall: credits)
Spalten eines Benutzers verändern (In dem Fall: credits und ip_last)
$username = 'Johnix';
$user = Factory::buildUser($username);
$user->credits = 100;
$user->ip_last = $_SERVER['REMOTE_ADDR'];
$user->ExecuteUpdate(); # anstatt 2 Queries auszuführen nur einen (yay)
Anderen Benutzer als Freund hinzufügen
$username = 'Johnix';
$user = Factory::buildUser($username);
$user2 = Factory::buildUser('Bob');
$user->AddFriend($user2);
Prüfen, ob ein User mit einem anderen befreundet ist
$username = 'Johnix';
$user = Factory::buildUser($username);
$user2 = Factory::buildUser('Bob');
$user->IsFriendsWith($user2);
Und viele mehr!
Codebeispiele aus der Klasse
Spoiler anzeigen
Methode ExecuteUpdate()
public function ExecuteUpdate(){
if ($this->Exists){
$sizeOfSetArray = sizeof($this->SetArray);
$counter = 1;
$setClause = null;
foreach ($this->SetArray as $column => $value){
$this->row->$column = $value;
$value = $this->connection->real_escape_string($value);
if ($counter == $sizeOfSetArray){
$setClause .= "$column = '$value'";
}else{
$setClause .= "$column = '$value', ";
}
$counter++;
}
$this->connection->query("UPDATE users SET $setClause WHERE username = '".$this->usr."'");
}else{
return false;
}
}
Alles anzeigen
Methode IsFriendsWith(User $user)
public function IsFriendsWith(User $user){
if ($user->Exists && $this->Exists){
return $this->connection->query("
SELECT user_one_id, user_two_id FROM messenger_friendships
WHERE user_one_id = '".$this->row->id."' AND user_two_id = '".$user->row->id."'
OR user_two_id = '".$this->row->id."' AND user_one_id = '".$user->row->id."'")->num_rows > 0;
}else{
return false;
}
}
Alles anzeigen
Das Plugin-System:
Spoiler anzeigen
Die User-Klasse besitzt eine magische Methode, nämlich __call(), mit der aufgerufene Methoden die nicht in der Klasse vorhanden sind bearbeitet werden können.
Die __call() Methode ist so aufgebaut:
public function __call($method_name,$args){ # Plugins
$file = PHP_PATH.'RPlugins/User/'.$method_name.'.php';
if(file_exists($file)){
$nondirectAccess = TRUE;
require_once $file;
$plugin_return_value = Registry::get('PLUGIN_RETURN_VALUE');
Registry::remove('PLUGIN_RETURN_VALUE');
return $plugin_return_value;
}
}
Alles anzeigen
Und so sieht ein Beispiel Plugin (ExamplePlugin) aus.
Dies ist eine einzelne Datei (ExamplePlugin.php) und liegt im Plugin Ordner.
if (!isset($nondirectAccess)){ die("Direkter Zugriff nicht erlaubt"); }
$irgendeineZahl = 1*2*3*4*5+5;
$str = $this->row->username.": ".$this->row->credits." - ".$irgendeineZahl;
Registry::add('PLUGIN_RETURN_VALUE', $str);
Die neue Methode kann man wiefolgt aufrufen
Wie fang ich an?
Spoiler anzeigen
Als erstes downloadest du dir das beigefügte RAR Verzeichnis und packst dessen Inhalt in einen beliebigen Ordner, in dem du diese Klasse verwenden möchtest.
Nun öffnest du die "RequireThis.php" Datei, editierst die MySQL Daten und änderst die konstante "PHP_PATH" auf den absoluten Pfad auf dem dein Ordner liegt.
Wenn zum Beispiel dein CMS auf dem Root Verzeichnis liegt, dann lautet der Code
Nun öffnest oder erstellst du eine Datei und schreibst relativ weit oben
require 'RequireThis.php';
rein. Nun kannst du in dieser Datei die Funktionen der Klasse benutzen.
Download: UserClass.RAR
Ich werde die Klassenbibliothek in unregelmäßigen Abständen erweitern und neue Funktionen hinzufügen.
Falls ihr ein Plugin erstellt habt, könnt ihr es gerne hier unter diesen Thread posten.
Du hast Verbesserungsvorschläge oder einen Fehler zu melden?
Schreibe doch einen Post unter diesem Thread oder mir eine private Nachricht.