dedlfix: Doppelte Aufrufe von Funktionen vermeiden

Beitrag lesen

Hi!

ich habe vor, den Code auf meiner Seiten mit Klassen auf den neusten Stand zu bringen und somit auch schneller zu machen.

OOP statt Nicht-OOP macht keinen Code schneller.

$query = mysql_query("SELECT permission FROM permissions WHERE userid = '".$_SESSION['userid']."' AND permission > 0 LIMIT 1");

Kontextwechsel beachten!

Jetzt kann es allerdings sein, dass dieselbe Abfrage auf der selben Seite öfters durchgeführt werden muss. Nun wäre es dann aber so, dass die Funktion öfters aufgerufen würde und somit die Berechtigung öfters überprüfen würde, obwohl es ja einfacher wäre, die Abfrage einmal durchzuführen und diese dann zu speichern.

Dann solltest du das Ergebnis zwischenspeichern:
Wenn für die gewünschte Berechtigung kein Eintrag im Array der Berechtigungen enthalten ist, frag sie aus dem DBMS ab und trag das Ergebnis in das Element ein. Gib den Elementinhalt zurück, sollte ja nun true oder false sein. Weitere Fragen überspringen die DBMS-Abfrage. Du solltest das gleich mit allen Berechtigungen am Stück machen, weil es unter anderem solche DBMS-Abfragen sind, die signifikant Zeit verbrauchen.

Ich hatte das Gefühl, dass dies eventuell mit Klassen realisierbar wäre.

Klassen spielen bei sowas keine besondere Rolle. Du kannst das mit und ohne Klassen gleichwertig implementieren. OOP dient der Ordnung und Strukturierung und weniger einer bestimmten fachlichen Zielerreichung.

Theoretisch könnte man bei Berechtigungen das ganze eh schon einmal vorher abfragen und in einer Konstante speichern, was dann beim Bitvergleich ja überall klappen würde. Aber generell bei anderen Funktionen, die nicht immer gebraucht würden, wäre dies nicht praktisch.

Ich würde keine Bits (in einem Byte, Integer, sonstwas) nehmen sondern boolesche Werte. Speicher ist heute nicht mehr so knapp. Das obige Prinzip kannst du für alle Arten von Daten nehmen.

Lo!