php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.03.2006, 10:59  
Benutzer
 
Registriert seit: 30.09.2005
Beiträge: 71
Timo Trallala
Standard globale Variablen und OOP

Hi Leutz,

ich muss mich jetzt mal an euch wenden. Habe an anderer Stelle mal ne
Codestrecke mit einer Frage dazu veröffentlicht, und bekam von allen
Seiten nur Buh-Rufe: Globale Variablen...das macht man nicht, schlechter
Stil...die müssen weg!

BSP:
PHP-Code:
error_reporting (E_ALL);

ini_set("display_errors"TRUE);

class 
functions {

    function 
getMainCat($cat)
        {
        global 
$lang;
        
$db1 = new dbconn(hostuserpassname);

        if (empty(
$cat)) {
            return 
$lang["leftcontent"]["navigation"];
        } else {
            
$sql "select * from " tbl_catalog " where cat_id='$cat'";
            
$result $db1->query($sql);

            while (
$data mysql_fetch_assoc($result))
                if (
$data["cat_parent_id"]) {
                    return 
$this->getMainCat($data["cat_parent_id"]);
                } else {
                    return 
$data["cat_description"];
                }
        }
        } 
nun muss ich aber auf z.b. auf diverse Sprachpakete zurückgreifen. Die
befinden sich in einem Ordner lang:
BSP:
PHP-Code:
$lang["secondary_nav"]["Warenkorb"] = "Warenkorb";
$lang["secondary_nav"]["Konto"] = "Mein Konto";
$lang["secondary_nav"]["Versandkosten"] = "Versandkosten"
Aber auch in der config befinden sich best. Array-Vars auf die u.U.
zurückgegriffen werden muss. Die hab ich bis dato immer als globale
Variablen eingebunden.

Antwort/ Verbesserungsvorschläge habe ich von diesen Nörglern nicht
bekommen.
Vielleicht kann mir hier jemand sagen, warum meine Vorgehensweise
soooooooo böse & schlecht ist und vor allem, wie ich es anders machen
könnte

mfG

derTrallala
Timo Trallala ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.03.2006, 11:11  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard Re: globale Variablen und OOP

Zitat:
Zitat von Timo Trallala
Globale Variablen...das macht man nicht, schlechter
Stil...die müssen weg!
full ack

übergib das Array im Kontructor der Klasse und speicher das ganze in ner Membervariable und gut ist, dadurch ist es überall im Objekt verfügbar und du hast keine globalen.

Oder schreib dir Mehtode die das in ne Membervariable schreibt zb. setLang()

Globale Variablen sind einfach fehleranfällig ein genaues Beispiel kann ich dir nicht geben aber es ist halt so weil globale von überall her geändert werden können und diese Stelle dann beim debuggen zu finden ist schwer.
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline  
Alt 28.03.2006, 11:34  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.235
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Grundsätzlich verdammen muss man globale Variablen nicht, denn ganz ohne geht es auch nicht. Und es ist auch ein Zeichen von schlechtem Design, wenn man sich wirklich globale Daten in jede Klasse aufs neue kopiert, zumahl es bei komplexeren Arrays unnötig Speicher frisst und Zeit...

Aber wie HStev schon sagt, solltest du genau überlegen, wann und wo du globale Variablen einsetzt. Du solltest globale Variablen immer gut initialisieren (Stichwort register_globals, was einem "Hacker" Tür und Tor öffnen könnte) und du solltest zentrale Stellen haben, wo diese globalen Variablen abgefragt und manipuliert werden.

In Zusammenhang mit OOP bietet sich an, wenige globale Instanzen zu halten, bei deinem Beispiel eine Art "LangRegistry". Diese Klasse ist einzig verantwortlich für die Auswertung und Rückgabe der Lang-Daten.
PHP4: Eine Instanz wird in einer globalen Variable gespeichert (beispielsweise $langRegistry) und von überall genutzt. Die Lang-Daten befinden sich in der Klasse selbst als lokale Daten. Die Instanz wird an keine Funktion übergeben (PHP4 kopiert sonst eventuell das Objekt komplett).
PHP5: Die Instanz befindet sich nicht mehr in einer globalen Variable, sondern einer statischen Klassenvariable. Dadurch kommt man ganz ohne globale Variablen aus.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline  
Alt 28.03.2006, 12:02  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

ja gut n PHP4 sollte man Referenzen nutzen bei sowas

sorry hab mal wieder PHP5 vorausgesetzt
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Klasse statt globaler Variablen ecomeback PHP-Fortgeschrittene 6 15.07.2008 16:30
Übergeben von Variablen an in PHP eingebundenes Perl-Script shredder01 PHP Tipps 2008 3 04.04.2008 09:25
Datei mit Variablen so includen, dass Variablen nutzbar? BartTheDevil89 PHP Tipps 2008 6 22.01.2008 20:57
unerklärliches Leeren von Variablen KuShi PHP Tipps 2007 2 08.07.2007 15:19
Teil einer Variablen mit einer Variablen ersetzen ? simsalabim PHP Tipps 2007 11 20.03.2007 20:36
Variable aus Variablen zusammensetzen juhuwoorps PHP Tipps 2007 1 28.11.2005 21:50
Globale Variablen PHP Tipps 2005-2 15 26.07.2005 12:26
globale Variablen PHP Tipps 2005 10 27.04.2005 12:20
Variablen übergeben bzw. auslesen? PHP Tipps 2005 4 30.01.2005 03:56
[Erledigt] register globals off bei variablen Variablen... PHP Tipps 2005 4 25.01.2005 17:50
Variablen leeren PHP Tipps 2005 14 06.01.2005 18:19
globale variablen PHP Tipps 2004 2 25.09.2004 20:47
Globale Variablen Beatbox PHP Tipps 2004 10 10.09.2004 17:55
Variablen per adresse übergeben rocco PHP Tipps 2004 7 24.07.2004 12:03
Globale Variablen PHP Tipps 2004 3 08.07.2004 00:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php oop globale variable, php oop global, objektorientierte programmierung globale variablen, php oop globale variablen, oop globale variablen php, globale konstanten objektorientierte programmierung, globale variablen teil von oop, php oop variables globale, php wie globale variable oop, oop php variablen, objektorientiertes programmieren public variable, php oop global class, oop globale variable php, php mit globalen variablen schlechter stil, php oop global variables, php oop variable übergeben global, php objektorientiert globale variable, php5 oop warenkorb beispiel, objektorientierte programmierung globale variabeln, global php5 oop

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:25 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.