anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Mo 16 Jun, 2025 20:27

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr 05 Mai, 2006 16:25 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Nun ja, die Idee hatte ich schon länger. Durch Aurics veröffentlichen eines OOP-Wohnviertels hab ich mich dann zusammen gerissen und mal planlos mögliche Objekte notiert die man brauchen könnte.
Zum Beispiel wäre da die Klasse "User", ein Beispiel hier:

[php]class User
{
var $user; // Entspricht session["user"]
var $acctid; // Die Accountid
var $prefs; // Entspricht dem Inhalt der Tabelle "prefs"
var $output; // Entspricht session["output"]
var $allowednavs; // Entspricht session["allowednavs"]
var $bufflist; // Entspricht session["bufflist"]

var $message; // Eventuelle Fehlermeldungen
var $saveduserdata; // Vergleich mit den verändernten array damit nicht geänderte Beträge nicht geschrieben werden.
// Veringert den Transferbug!

// Konstruktor
//function User($acctid)
//{
function __construct($acctid)
{
$this->acctid = $acctid;
$this->user = db_fetch_assoc(db_query('SELECT * FROM `accounts` WHERE `acctid` = "'.addslashes(stripslashes($acctid)).'"'));
$this->user = $this->Array_Unserialize($this->user);

$this->saveduserdata = $this->user;
unset($this->saveduserdata['output'],$this->saveduserdata['allowednavs']);

$this->output = $this->user['output'];
$this->allowednavs = $this->user['allowednavs'];

$this->prefs = array();

$prefs = db_query('SELECT `pref`,`value` FROM `prefs` WHERE `acctid` = "'.addslashes(stripslashes($acctid)).'"');
while($row = db_fetch_assoc($prefs))
{
$this->prefs[$row['pref']] = $row['value'];
}
db_free_result($prefs);
unset($row,$prefs);

$message = '';
}

// Unserialisiert eingetragene Felder um die ursprünglichen arrays zu erhalten
function Array_Unserialize($array)
{
$fields = array(
'prefs'=>true,
'dragonpoints'=>true,
'allowednavs'=>true,
'bufflist'=>true,
);

while(list($key,$val) = each($fields))
{
if($val === true)
{
$array[$key] = unserialize($array[$key]);
}
}

return $array;
}

// Speichert den User wieder vollkommen in der Datenbank (Leider...)
function SaveUser()
{
if($_SESSION['session']['loggedin'] === true && $this->acctid > 0)
{
$this->user['output'] = $this->output;
$this->user['allowednavs'] = $this->allowednavs;
$this->user['bufflist'] = $this->bufflist;

$sql = 'UPDATE `accounts` SET ';
reset($this->user);

while(list($key,$val) = each($this->user))
{
if(isset($this->saveduserdata[$key]) && $val != $this->saveduserdata[$key])
{
if (is_array($val))
$val = serialize($val);

$val = addslashes($val);
$sql.='`'.$key.'` = "'.$val.'", ';
}
}

$sql = substr($sql,0,strlen($sql)-2);
$sql.= ' WHERE `acctid` = '.$this->acctid;
db_query($sql);
}
}
}[/php]

Natürlich ist das nur das Rohprodukt ^^
Wenn wer wirklich interessese daran hat an der Idee weiter zu machen (Und eine Ahnung von OOP hat!) soll sich bitte per PN melden!

(Wenn sich niemand meldet hab ich den Beitrag hier nie verfasst und werde still für mich daran arbeiten. Jedoch werde ich es dann auch nicht veröfentlichen sondern für einen "Pherae-Release" oder so ähnlich aufsparen)

PS: Kenntnisse in der OOP für PHP 5 ist nicht unbedingt nötig, es reicht die Grundlagen (Also OOP bei PHP 4) zu können ^^
Wird dann wahrscheinlich 2 Versionen geben... PHP 4 und für PHP 5.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 05 Mai, 2006 18:56 
Offline
Lehrling
Lehrling

Registriert: Do 02 Feb, 2006 23:16
Beiträge: 26
LoGD: http://atrahor.de
An und für sich bietet es sich in einigen Punkten an, einen objektorientierten Ansatz zu wählen, also gute Sache.
Der Haken: Siehe http://www.webmasterstop.com/56.html .

Ich denke, man kann auch in PHP OOP soweit optimieren, dass es nicht ganz so sehr an der Performance saugt. Nur wird der Ansatz so gut wie immer ein gutes Stück langsamer sein als die nicht objektorientierte Lösung - bei Anwendungen wie CMS ist das vernachlässigbar, da sich die Seitenaufrufe meistens in Grenzen halten. Nur bei Onlinespielen, bei denen auch noch so viele Seitenaufrufe zustande kommen wie in LotGD (Waldkämpfe), kann das ein ernstes Problem darstellen.

Mich würde nichtsdestotrotz interessieren, wie du das hinbekommst! Vielleicht schaffst du es ja unter vertretbaren Performanceeinbußen.. Dann wär es ne Überlegung wert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 05 Mai, 2006 19:37 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Talion hat geschrieben:
An und für sich bietet es sich in einigen Punkten an, einen objektorientierten Ansatz zu wählen, also gute Sache.
Der Haken: Siehe http://www.webmasterstop.com/56.html .

Ich denke, man kann auch in PHP OOP soweit optimieren, dass es nicht ganz so sehr an der Performance saugt. Nur wird der Ansatz so gut wie immer ein gutes Stück langsamer sein als die nicht objektorientierte Lösung - bei Anwendungen wie CMS ist das vernachlässigbar, da sich die Seitenaufrufe meistens in Grenzen halten. Nur bei Onlinespielen, bei denen auch noch so viele Seitenaufrufe zustande kommen wie in LotGD (Waldkämpfe), kann das ein ernstes Problem darstellen.

Mich würde nichtsdestotrotz interessieren, wie du das hinbekommst! Vielleicht schaffst du es ja unter vertretbaren Performanceeinbußen.. Dann wär es ne Überlegung wert.


Nun ja... Wenn man das so anschaut sieht das ja wirklich beängstigend aus ^^
Aber: Testet man das ganze in kleineren Bereichen als 1'000'000mal merkt man keinen bedauerlichen Unterschied (0.000001 Sekunden? ^^)

Und selbst wenn 0.9.7 Objekt Orientiert ist wär sie bei weitem noch schneller aus die neue Version :lol:

PS: Grundstruktur erfolgreich in die Version intrigiert (Natürlich Abwwärtskompatibel, so schnell bin ich nicht im S&E ^^)

EDIT: 20mal alle diese Durchläufe der Testseite, forschleife jedoch nur je 100mal, Unterschied nicht gravierend:

http://eliwood.dyndns.org/bench2.php

EDIT2: http://forum.webstatt.org/thread.php?threadid=743
Eine andere Meinund zu dem Benchmark ^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 05 Mai, 2006 20:32 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
Man sollte aber dies bezüglich beachten, das man anhand von "class" wesentlich sauberer den Code halten kann als wenn man nur Doppelte Funktionen & co hat. Worin rein garkeine Übersicht besteht... Denn wenn man die Funktionen schreibt, dann sind meist die Namen bereits besetzt d.h. lohnt sich auch OOP in gewisser Art & Weise.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 05 Mai, 2006 21:20 
Offline
Lehrling
Lehrling

Registriert: Do 02 Feb, 2006 23:16
Beiträge: 26
LoGD: http://atrahor.de
Eliwood hat geschrieben:
Und selbst wenn 0.9.7 Objekt Orientiert ist wär sie bei weitem noch schneller aus die neue Version :lol:


Wahrscheinlich. Aber ich denke mal, in Sachen Geschwindigkeit ist die neue wohl der falsche Maßstab ^^

Eliwood hat geschrieben:


Dass das Beispiel hinkt, ist klar. Damit wird nur der grundlegende Unterschied in der Geschwindigkeit verdeutlicht. Bei komplexeren Strukturen relativiert sich das natürlich etwas.
Mich würde es in dem speziellen Fall von LotGD interessieren. Wennste die Grundstruktur bereits umgeschrieben hast, kannste vielleicht 1000 Userklicks simulieren und die benötigte Zeit messen? Vorher - nachher?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 05 Mai, 2006 22:56 
Offline
Eingeweihter
Eingeweihter
Benutzeravatar

Registriert: Di 14 Jun, 2005 10:52
Beiträge: 78
Wohnort: Zusmarshausen
Geschlecht: Männlich
OOP ansich ist sicherlich ne super sache! aber:
1. muss ich Kevz zustimmen der von dir gezeigte ansatz hat nicht viel mit oop zu tun und
2. ist das mit den Performaceeinbußen u.U. ein wichtiger Faktor...

greetz

_________________
theTJ

back @anpera.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 05 Mai, 2006 23:06 
Offline
Profi
Profi
Benutzeravatar

Registriert: Do 29 Dez, 2005 16:50
Beiträge: 178
Wohnort: Pinneberg
Stellt sich trotzdem immernoch die Frage warum nicht einfach den Funktionen ein Präfix verpassen, sich das OOP sparen und somit Übersicht UND Performance zu erhlaten? ;)
Für solche recht einfachen Anwendungen wie LoGD ist OOP einfach ungeeignet da es bei weitem einfacher ohne geht und wenn man es dann doch braucht kann man es durch den Modulartigen Aufbau ja jederzeit lokal verwenden.

Übrigens, hab ich das was verpasst oder muss in einer Schleife ein Objekt jedes mal neu erzeugt werden ehe man es verwenden darf?
Ohne diese unnötige Aktion sinkt der Performanceverlust beim Benchmark stark ab!

_________________
LoGD-Server ist zwar weg aber jetzt kommt das nächste Projekt, mehr dazu auch Hier


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 05 Mai, 2006 23:49 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Ganz einfach: Dann müsste man für jede neue Klasse die instanziert werden würde einfach die selben Funktionen nochmal erstellen mit anderem Prefix :P

(Class Race_Human extrand Race_Dummy {} )
Modulartiger Aufbau? Wo bitte? In 0.9.7? Fehlanzeige.

@ the TJ: Kevz hat nirgendwo erwähnt dass das nichts mit OOP zu tun hat.
Zudem hat das schon was mit OOP zu tun (PHP 4-OOP ist eh simple *g*).

Punkte Performanceverlust: So gravierend sind 0.001 Sekunden auch wieder nicht ô_Ò

Ich seh schon ich hab das hier überflüssigerweise hingeschrieben... Naja, wenn ichs alleine mach spricht mir wenigstens niemand drein :P


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 06 Mai, 2006 00:22 
Offline
Eingeweihter
Eingeweihter
Benutzeravatar

Registriert: Di 14 Jun, 2005 10:52
Beiträge: 78
Wohnort: Zusmarshausen
Geschlecht: Männlich
*amkopfkratz* ich muss schon echt müde sein...

naja ich werd morgen mal ein projekt-system aufsetzen (eigentlich nur n wbbl und n Wiki) um mein LotGD-Projekt zu "veröffentlichen" damit
elliwood (bearbeitet) hat geschrieben:
spricht mir wenigstens Jemand drein
:-) und ich muss mir nicht allein den Kopf über den Code zerbrechen...

_________________
theTJ

back @anpera.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 06 Mai, 2006 12:16 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
Naja, großer Vorteil des OOP ist ja auch, das man (im Optimalfall) Die Daten immer in einem gewissen Kontext hat, was sowohl die Zuordnung, die Übersicht und das Debugging einfach macht - das habe ich beim Schriebn des WV-Mods deutlich gemerkt.

Natürlich kann es sein, dass strukturierte Programmierung hier performater wäre, aber es gibt auch stark beschleunigende OOP-Techniken, man sehe sich nur mal die mysqli Erweiterung an. Die Arbeitet auch mit klassen und hängt die "Normalen" Mysql-handler gnadenlos ab.

@Eli: ich würde vllt noch jeweils eine prüfung auf die PHP Version einbauen, sodass dynamisch der richtige standart verwendet wird.

(ist es eigentlich möglich, einen nach PHP4 Methode verwendeten Konstruktor auch in PHP5 zu verwenden? *grübel*)

@ Kevz: wb!

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 06 Mai, 2006 12:57 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
Thank's Aurci,
ja ist es. Dennoch sollte man es lieber PHP5 Programmier gerecht Schreiben damit wirklich perfekt ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 07 Mai, 2006 14:45 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
theTJ hat geschrieben:
*amkopfkratz* ich muss schon echt müde sein...

naja ich werd morgen mal ein projekt-system aufsetzen (eigentlich nur n wbbl und n Wiki) um mein LotGD-Projekt zu "veröffentlichen" damit
elliwood (bearbeitet) hat geschrieben:
spricht mir wenigstens Jemand drein
:-) und ich muss mir nicht allein den Kopf über den Code zerbrechen...


Irgendwie check ich den Beitrag nicht... Muss wohl daran liegen dass es Sonntag ist.

@ Auric: Ja, PHP 4 Klasen müssten problemlos unter PHP 5 auch funktionieren. Nur PHP 5 funktioniert nicht unter PHP 4.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 07 Mai, 2006 15:53 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
Joah.. hab ich mittlerweile auch durchs testen herausgefunden (lob an XAMPP für die Versionsschaltung)

Insofern wäre wohl eine Versionsbedingte Unterscheidung am besten - es wird noch an zu vielen Stellen PHP4 Verwendet, um nur für Version 5 zu Programmieren...

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum