Parameter vs. global
Paul
- php
Moin.
Ich habe Funktionen, in denen z.B. der username überprüft werden muss. Also muss ich in den Funktionen immer auf ein und die selbe Variable zugreifen.
Was ist besser und wo liegen die Vor-/Nachteile:
1)***************************
a($username);
b($username);
c($username);
function a($username) {...},
function b($username) {...}
function c($username) {...}
2)***************************
a();
b();
c();
function a() {global $username; ...}
function b() {global $username; ...}
function c() {global $username; ...}
Hi!
Ich habe Funktionen, in denen z.B. der username überprüft werden muss. Also muss ich in den Funktionen immer auf ein und die selbe Variable zugreifen.
Dieser Zwang sollte nicht bestehen. Vielleicht willst du irgendwann mal einen Namen prüfen, der nicht in $username abgelegt ist.
Was ist besser und wo liegen die Vor-/Nachteile:
In kleinen Scripts macht es sicher nicht viel aus. Aber je größer ein Programm wird, desto wichtiger ist es, ordentlich zu strukturieren und Aufgaben zu trennen. Das machst du ja jetzt schon mit Funktionen, aber sie arbeiten nicht autark, sie wollen eine bestimmte Umgebung vorfinden, nämlich global gesetzte Variablen. Auch wenn Wiederverwendbarkeit bei dir keine Rolle spielen sollte, so sind diese Nebenwirkungen (englisch: side effects) stets mit zu beachten, wenn du einen Funktionsaufruf siehst. Wenn hingegen alles über Parameter und Rückgabewerte abgewickelt wird, muss man die Arbeitsweise der Funktion nicht unbedingt kennen - man kann sie am Namen und den übergebenen Werten sehen (wenn sie sprechend genug gewählt wurden). Jedenfalls siehst du, womit die Funktion arbeitet und wo ihr Ergebenis landet.
Lo!
Vielen Dank für die echt gute Erklärung!
Kleine Nachfrage:
ich habe nun statt dem Nutzernamen z.B. einen String in dem der relative Pfad zu Bildern steht ('../images/').
Den Nutzer der Funktion interessiert doch eigentlich nicht dass/ob diese Information für die Funktion benötigt wird. Wäre hier nicht eine globale Variable besser?
Paul
Hi,
ich habe nun statt dem Nutzernamen z.B. einen String in dem der relative Pfad zu Bildern steht ('../images/').
Den Nutzer der Funktion interessiert doch eigentlich nicht dass/ob diese Information für die Funktion benötigt wird. Wäre hier nicht eine globale Variable besser?
Nein.
Was ist, wenn mal verschiedene Verzeichnisse für Bilder verwendet werden sollen, aber immer noch die gleiche Funktion genutzt werden soll?
Und wenn definitiv nur eine Pfadangabe gebraucht wird, dann ist es immer noch angebrachter, diese in der zentralen Konfiguration des Scriptes als Konstante zu definieren.
MfG ChrisB
Und wenn definitiv nur eine Pfadangabe gebraucht wird, dann ist es immer noch angebrachter, diese in der zentralen Konfiguration des Scriptes als Konstante zu definieren.
Das war's. Vielen Dank!
Hi!
Und wenn definitiv nur eine Pfadangabe gebraucht wird, dann ist es immer noch angebrachter, diese in der zentralen Konfiguration des Scriptes als Konstante zu definieren.
... und diese dann der Funktion zu übergeben, denn eine globale selbst definierte Konstante ist auch nicht besser als eine globale Variable.
Lo!