Funktionen und Referenzen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Nili76
Mitglied
Beiträge: 38
Registriert: 15.05.2007 22:29

Funktionen und Referenzen

Beitrag von Nili76 »

Hi,

ich bin seit kurzem dabei und versuche mich in PHPBB3 einzuarbeiten.
Mein erstes PRojekt sollte sein, dass ich die LDAP-Anmeldung und die normale DB-Anmeldung zusammenbringe.

Einige Nutzer haben einen LDAP-User, andere (der Admin) nicht. Hierzu habe ich in der Users-Tabelle eine Spalte angelegt, die ich in der auth_ldap abfrage.... Wird festgestellt, dass der User sich über LDAP anmelden soll, wird die LDAP-Abfrage weiter ausgeführt.... Steht da aber, dass die normale db genommen werden soll, hatte ich vor

Code: Alles auswählen

if ($row['user_auth_db'] == true)
	{
	include('auth_db.php');
	return login_db($username,$password) 
	}
zu schreiben.

Man stelle sich vor... das klappt sogar... Nur hätte ich zwei Bitten:

1.) Ich würde gerne von euch ein paar Meinungen zur Denkweise von mir haben, wie ich mit den Funktionen umgehe....
Z.B. ist das ok, dass ich so eine include Anweisung in einer Funktion nehme oder sollte ich fast den kompletten Code einfügen, um 2 If Sätze und eine SQL Abfrage weniger zu haben? (unsauber/verboten/geht so... kann man besser machen, indem...)

2.) Frage zu Referenzen in Funktionsaufrufen:

Hab ich das richtig verstanden, dass ich bei einer Funktion wie

Code: Alles auswählen

function login_db(&$username, &$password)
{
...
}
(Beispiel aus der auth_db.php)

die Referenz zu $username und $password übergeben wird und ich mit

Code: Alles auswählen

$username = 'ein ganz anderer'
direkt die Variable ändere, ohne, dass sie der Funktion per global bekannt gemacht wurde?

Denn nur so erkläre ich mir, warum ich in meinem ersten Codebeispiel die Funktion login_db($username,$password) aufrufe und die Funktion selber mit & davor deklariert sind...

Ich habe auch ein wenig gegoogelt, aber mir fehlen noch die richtigen Schlagwörter, um ein nettes Tutorial zu sehen, die mir veranschaulicht, was &$Variable in einer Funktionsdeklaration zu tun hat.

Gruß
Nils
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Funktionen und Referenzen

Beitrag von gn#36 »

Zur ersten Frage: Du kannst sicherlich dynamisch einbinden abhängig davon was ausgeführt wird. Performancemäßig könnte das sogar Vorteile haben, denn der Parser muss nicht den unnötigen Code parsen und dann ausführen sondern nur den den er auch braucht. Du solltest aber sicherstellen dass im Zweifelsfall die Authentifizierung fehlschlägt, also entweder eine der beiden Methoden erzwingen (if und else nicht elseif) oder im zweifelsfall einfach einen Authentifizierungsfehler zurückgeben. Auch wenn du vielleicht nicht planst mehr Möglichkeiten in der DB zu haben sollte man mögliche Probleme aufgrund von Datenfehlern bei solchen Sachen programmtechnisch möglichst schon von vorne herein ausschließen. (ob du das gemacht hast oder nicht weiß ich nicht, ich wollte es nur mal anmerken)

Zur zweiten Frage: Eine Referenz sorgt dafür dass du die Variable so verarbeiten kannst wie die Variable die du der Funktion übergeben hast. Ändert sie sich in der Funktion, dann ist sie auch im Programmablauf nach dem Funktionsende weiterhin mit dem veränderten Wert ausgestattet. Beim call by value dagegen wird der Wert übergeben, du kannst damit anstellen was du willst innerhalb der Funktion, außerhalb der Funktion wird sich dadurch nichts am Wert ändern. Eine Referenz sollte man möglichst auch bei größeren Strukturen übergeben die nicht verändert werden müssen, da dann nur eine Adresse an die Funktion weitergegeben werden muss und nicht die (übertrieben) 20 MB die an der Adresse gespeichert ist. Wie sehr das bei PHP relevant ist bin ich mir gerade nicht sicher, bei anderen Programmiersprachen (wie z.b. C(++)) kann das aber den Ablauf deutlich beschleunigen wenn man viele Funktionsaufrufe (z.b. in einer Schleife) im Programm hat.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Nili76
Mitglied
Beiträge: 38
Registriert: 15.05.2007 22:29

Re: Funktionen und Referenzen

Beitrag von Nili76 »

Herzlichen Dank für die Antwort. Du hasst mir damit ein paar Denkanstöße gegeben und gleichzeitig mir die Bestätigung gegeben, dass ich auf dem richtigen Weg bin, php und c++ zu verstehen.

Gruß
Nils
Antworten

Zurück zu „Coding & Technik“