Portal > Foren > PHP > PHP-Programmierung > Config Klasse sinnvoll?
Antwort
 
Themen-Optionen
Alt 15.06.2006, 21:27 Nach oben    #1
Benutzer
 
Registriert seit: 31.12.2005
Beiträge: 90
Standard Config Klasse sinnvoll?

Hey,

ich habe ein recht großes Projekt (also mehrere 10 tausend Zeilen sind für mich groß!). Dabei möchte ich immer alles möglich variable gestalten und habe dafür eine cfg.php, in der ich dann viele Variablen habe, und am Ende jeder Zeile diese Variablen halt beschreibe. Die Variablen werden in Form von Variable und nicht in Form eines Cfg-Arrays festgelegt.

Da ich sehr vieles auf Basis von Funktionen mache, habe ich teilweise innerhalb von Funktionen 10 globals.

Ich weiß zwar in der Regel, in welcher Funktion auf welche Variablen zugegriffen wird (so grob, vor Allem bei wichtigen Funktionen), doch habe ich letztens gelesen, dass es eigentlich nicht sehr gut ist, mit global zu arbeiten.

Nun, ich habe aber vielleicht 200 Config Variablen und wie oben erwähnt, ein großes Projekt.

Nun habe ich mir übrelegt, ob ich mir die Mühe eventuell mache, alles zu vereinheitlichen!?

Nur wie könnte ich das machen? Wäre hier eine Config Klasse sinnvoll, die einfach nur eine Reihe von Eigenschaften hat, und die ich dann als einziges innerhalb der ganzen Funktionen als global definiere, und immer per $cfg->get('varname') auf eine Variable zugreife, die ich sonst per $varname ansprechen würde? So weiß ich wenigstens immer, welche Variablen ich nicht unbedingt verändert sollte, bzw dass es sich um eine Cfg Variable handelt.

Also in etwa sowas:

PHP-Code:
class config {
    var 
$cfg = array();
    
    function 
config()
    {
        return 
true;
    }
    
    function 
set($name$val$overwrite false)
    {
        if(
$overwrite === false && isset($this->cfg$name ]))
            return 
false;
        
        
$this->cfg$name ] = $val;
    }
    
    function 
get($name)
    {
        if(!isset(
$this->cfg$name ]))
            return 
null;
            
        return 
$this->cfg$name ];
    }

Nur stellt sich mir dann die Frage, wie ich es mit den Arrays mache. Also teilweise lege ich auch Cfg-Variablen in Arrays ab (zwar selten, aber kommt schon vor).

Oder sollte ich es einfach so lassen, wie es ist? Ich meine, es wäre auch sehr schwer, überall die Variablen dann durch eine neue Methode zu ersetzten...

Wie würdet Ihr das machen?

P.s.: PHP4 ...
björn ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.06.2006, 00:01 Nach oben    #2
Erfahrener Benutzer
 
Benutzerbild von Prophet
 
Registriert seit: 10.05.2006
Ort: Jevenstedt
Beiträge: 131
Standard

Ich finde die Idee mit der klasse gut. Zwar sind in PHP4 die members nicht vor zugriff von aussen geschützt aber theoretisch kann die klasse ja schreibschutz gewährleisten. Ich würde es ebenfalls so machen (nur mit PHP5).

Allerdings würde ich die konfigurationsdaten in einer txt-datei oder einer datenbank lagern. Bei der txt (ini format) können spätere user einfach änderungen vornehmen. Bei einer DB müsstest du zwar eine schnittstelle zum einstellen erstellen aber das wäre für spätere anwender ja nur noch angenehmer.

EDIT: Sinnvoll wäre ebenfalls die klasse als singleton anzulegen. Da du vermutlich nie mehrere konfigurationen zur selben zeit benötigst. Evt. sollte sie dann auch inis direkt einlesen können bzw. DB auslesen
__________________

Geändert von Prophet (16.06.2006 um 00:38 Uhr).
Prophet ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.06.2006, 09:41 Nach oben    #3
Benutzer
 
Registriert seit: 31.12.2005
Beiträge: 90
Standard

Hi,

a) was ist ein Singleton bzw wie verwende ich sie/es (?)?
b) nur das Problem wäre, nun alle 200 (oder mehr) bereits verwendeten ConfigVariablen durch die neuen zu ersetzten, gibt es dafür ein TOol oder ähnliches?
c) die Daten in einer DB zu sichern wäre einiseits sehr cool, da ich diese dann über das adminmenü ändern könnte aber anderseits auch ein wenig doof, da ich somit bei jedem seitenaufruf die daten neu auslesen müsste.
d) wie kann ich den Schreibschutz per php4 erreichen? Garnicht, oder? Würde nur über php5 und dem schlüsselwort 'private var $varname' gehen, oder?

Desweiteren hätte ich stets Probleme mit Arrays. Ich lege z.b. die DB-Config Variablen in einem Array ab und übergebe dies dann der MySQL Klasse. Keine Ahnung, wie ich das dann machen könnte.
björn ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.06.2006, 12:33 Nach oben    #4
Erfahrener Benutzer
 
Benutzerbild von Prophet
 
Registriert seit: 10.05.2006
Ort: Jevenstedt
Beiträge: 131
Standard

Zu a:
Ein Singleton bezeichnet eine Klasse von der man nur eine Instanz erzeugen kann:
Professionelle Softwareentwicklung mit PHP5 -> Singletons

Zu b:
Du meinst das jetzt bezogen auf die Textdatei, richtig? Nun entweder du schreibst die bei jeder aktuallisierung innerhalb/durch php komplett neu oder man kann sie nur über den space, alos direktes öffnen verändern. Ich glaube man kann mit hilfe der Datei funktionen in PHP auch zeilenweise in dateien lesen und schreiben. Das sollte also kein Problem sein.
PHP.net: Filesystem Functions

Zu c:
Natürlich wäre das auslesen aus der Datenbank langsamer als das auslesen aus einer Datei. Aber im endeffekt wäre das glaube ich kein Problem. Musst du wissen wie du es machen willst.

Zu d:
Nein mit PHP4 geht das nicht, nur mit PHP5.
Professionelle Softwareentwicklung mit PHP5

Das verarbeiten des Array zu einem Query ist keine Problem. Entweder du aktuallisierst immer Komplett (nicht sinnvoll weil du jeden eintrag einzeln aktuallisieren müsstest). Oder du aktuallisierst immer wenn du einen Eintrag veränderst. Dann hättest du nur vereinzelte Querys. Allerdings musst du dann die Methoden Add und Set unterscheiden. Weil beim hinzufügen und ändern andere Querys verwendet werden (ausserdem ist es sauberer).
__________________
Prophet ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.06.2006, 13:12 Nach oben    #5
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

Hallo
ich hatte auch vor einiger Zeit gedacht eine Klasse zu erstellen die verschiedene Config Einstellungen beinhaltet. Ist eine gute Idee.
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.06.2006, 13:17 Nach oben    #6
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

In unserem aktuellen Projekt ist die Konfigurationsklasse eigentlich Dreh- und Angelpunkt, da von dort alle benötigten Informationen kommen.

Fazit: Definitiv sinnvoll. In meinen Augen fast unverzichtbar.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.06.2006, 18:43 Nach oben    #7
Benutzer
 
Registriert seit: 31.12.2005
Beiträge: 90
Standard

Zitat:
Zitat von Prophet
Zu a:
Ein Singleton bezeichnet eine Klasse von der man nur eine Instanz erzeugen kann:
Professionelle Softwareentwicklung mit PHP5 -> Singletons
ok, aber was macht das denn für einen Sinn? Ich erstelle davon eh nur eine Instanz?! Aber geht auch wieder nicht mit php4, oder?

Zitat:
Zitat von Prophet
Zu b:
Du meinst das jetzt bezogen auf die Textdatei, richtig? Nun entweder du schreibst die bei jeder aktuallisierung innerhalb/durch php komplett neu oder man kann sie nur über den space, alos direktes öffnen verändern. Ich glaube man kann mit hilfe der Datei funktionen in PHP auch zeilenweise in dateien lesen und schreiben. Das sollte also kein Problem sein.
PHP.net: Filesystem Functions
Nein, im Moment ist meine cfg.php einfach so:

$var1 = 'val1'; // komment1
$var2 = 'val2'; // komment2
...
$var200 = 'val200'; // komment200
angenommen ich mache nun eine configklasse, die die ganzen werte als eigenschaften besitzt, frage ich mich, wie ich das in allen meinen funktionen und php files ersetzten kann. weil statt $var1 müsste ich nun $cfg->get('var1'); machen etc ...

Zitat:
Zitat von Prophet
Zu c:
Natürlich wäre das auslesen aus der Datenbank langsamer als das auslesen aus einer Datei. Aber im endeffekt wäre das glaube ich kein Problem. Musst du wissen wie du es machen willst.
Nein nein, ich möchte zwar eine Config Klasse benutzten, aber wie gesagt will ich das erstmal nicht 'dynamisch' machen, sondern weiterhin per cfg.php, in der die Werte manuell zugewiesen werden. Ich möchte das Hauptsächlich zur besseren Übersicht in meinem Script machen, sodass ich dort dann direkt sehe, dass es sich um eine Config-Variable handelt, wenn ich diese per $cfg->get('varname') in meinem script verwende, und zusätzlich brauche ich nicht tausend globals^^

Zitat:
Zitat von Prophet
Zu d:
Nein mit PHP4 geht das nicht, nur mit PHP5.
Professionelle Softwareentwicklung mit PHP5
ok schade

Zitat:
Zitat von Prophet
Das verarbeiten des Array zu einem Query ist keine Problem. Entweder du aktuallisierst immer Komplett (nicht sinnvoll weil du jeden eintrag einzeln aktuallisieren müsstest). Oder du aktuallisierst immer wenn du einen Eintrag veränderst. Dann hättest du nur vereinzelte Querys. Allerdings musst du dann die Methoden Add und Set unterscheiden. Weil beim hinzufügen und ändern andere Querys verwendet werden (ausserdem ist es sauberer).
Das meine ich auch nicht. Klar sind Arrays und die Speicherung innerhalb einer DB etc nicht schwer. Ich meinte eher, dass ich mit meiner oben vorgestellten Config-Klasse, die sicher noch angepasst werden muss, da ich diese einfach mal so direkt hier rein geschrieben habe, nicht gescheit Config-Arrays festlegen kann. Denn eigentlich lege ich dabei immer nur einzelne Variablen und deren Werte fest, z.b. per $cfg->set('name', 'val'); aber ich nutzte zur Zeit auch Arrays, um zugehörige Variablen zu 'gruppieren', so etwa benötigt meine MySQL Klasse ein Array als Konstruktorparameter, das Daten wie DB-Host, Db-User, DB-Password etc enthält. Also weise ich zur Zeit das wie folgt in meiner cfg.php zu:
PHP-Code:
$db = array();
$db['host'] = 'localhost';
$db['user'] = 'root'
...
Aber mittels der oben vorgestellten ConfigKlasse könnte ich ja keine Arrays, sondern nur einzelne Werte festlegen, also z.b.: $cfg->set('host', 'localhost'); $cfg->set('user', 'root'); etc. Also müsste ich vor dem instanzieren meiner MySQL Klasse diese erst wieder kollektivieren:
PHP-Code:
$db = array();
$db['host'] = $cfg->get('host'); 
//etc ... 
Eventuell sollte ich hier meine Klasse so anpassen, dass man als 3. parameter von config::set() angeben kann, dass die neue Cfg-Variable in einem Array mit einem bestimmten Namen angelegt wird, und dann sollte man mittels config::get() ein Array mit einem bestimmten Namen holen können.
Also z.b.
PHP-Code:
$cfg->set('host''localhost''db');
$cfg->set('user''root''db'); // die daten werden in dem array mit dem namen des 3. parameters festgehalten
$db $cfg->get(false'db'); // false, da keine bestimmte eigenschaft zurückgegebn werden soll, sondern das array mit dem namen des 2. parameters 
Zitat:
Zitat von Ben
In unserem aktuellen Projekt ist die Konfigurationsklasse eigentlich Dreh- und Angelpunkt, da von dort alle benötigten Informationen kommen.

Fazit: Definitiv sinnvoll. In meinen Augen fast unverzichtbar.
Siehst Du, hier wäre es nun sinnvoll, wenn ich für diesen Bereich freigeschaltet wäre, auch wenn ich nur Tester bin, der zur Zeit noch nichts zu tun hat. Es wäre einfach toll, wenn ich sehen könnte, wie es die Profis machen ...
björn ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.06.2006, 18:53 Nach oben    #8
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

Äh wie gibts hier irgendeinen Bereich wo es was interessantes zum schauen gibt? Würde da auch mal gern nen Blick reinwerfen.
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.06.2006, 19:20 Nach oben    #9
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

Ich habe mal ein Tutorial geschrieben, was unter Anderem das behandelt hat:

http://forum.developers-guide.net/showthread.php?t=231

Kannst du dir ja mal anschauen, vielleicht ist es noch eine Anregung deine Config-Klasse etwas zu erweitern.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.06.2006, 19:20 Nach oben    #10
Benutzer
 
Registriert seit: 31.12.2005
Beiträge: 90
Standard

Zitat:
Zitat von ex³
Äh wie gibts hier irgendeinen Bereich wo es was interessantes zum schauen gibt? Würde da auch mal gern nen Blick reinwerfen.
Es gibt ein Gemeinschaftsprojekt. In das Forum darfst du reinschauen, sobald du dort regelmäßig tätig bist. Ich bin tester, aber dadurch habe ich atm noch nichts zu tun, da noch keine wirklichen Programme / Scripte released wurden! Aber hierfür wäre es nun schon praktisch für mich!
björn ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.06.2006, 19:43 Nach oben    #11
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Diskussionen und Infos zum Communityprojekt gibts hier.
Ansonsten bitte die Diskussion über das Projekt bitte nicht auf mehreren Threads verteilen.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.06.2006, 19:57 Nach oben    #12
Benutzer
 
Registriert seit: 31.12.2005
Beiträge: 90
Standard

Jop geht klar, hab ihn ja auch nur darauf hingewiesen!
björn ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Klasse in Klasse verwenden? goelliboy PHP-Programmierung 12 07.09.2007 11:43
Wie Objekte/Vars in jeder Klasse verfügbar machen? ex³ PHP-Programmierung 1 24.04.2006 19:54
Wert Varible in Listener anderer Klasse nutzen??? risa Desktop-Applikationen und Grafik 1 03.04.2006 07:36
Design für eine Klasse js-mueller Allgemeine Java-Programmierung 1 12.03.2006 19:23
DB Klasse Problem, vererben, kombinieren ex³ PHP-Programmierung 7 05.02.2006 17:06


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:08 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44