Von der Wichtigkeit der Reihenfolge von Werten in Funktionen

Artikel, Anleitungen, Minikurse und Leitfaden für alle möglichen PC-Themen und PHP/phpBB.
Antworten
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Von der Wichtigkeit der Reihenfolge von Werten in Funktionen

Beitrag von oxpus »

Um zu verstehen, warum z. B. die Variablen bei Funktionaufrufen immer in der gleichen Reihenfolge angeführt werden müssen, wie diese in der Funktion hinterlegt sind, hier mal ein kleiner Exkurs dazu.
Als beliebtestes Beispiel dient hier der Aufbau der Funktion

Code: Alles auswählen

function submit_post(...)
{
...
}
in der Datei includes/functions_post.php, die z. B. aus der Datei posting.php mit dem Aufruf

Code: Alles auswählen

submit_post(...);
angesprochen wird.
Da diese Funktion bereits recht umfangreich ist, wollen wir uns nachfolgend auf ein sehr einfaches Beispiel mit nur 2 Werten beschränken.

Hier für unser Beispiel eine Funktionsdefinition:

Code: Alles auswählen

function beispiel($wert1, $wert2)
{
...
}
Aufgerufen wird diese Funktion folglich so:

Code: Alles auswählen

beispiel($wert1, $wert2);
Nun muss man etwas tiefer einsteigen. Denn wichtig ist hierbei zu wissen, daß PHP diese Variablennamen unabhängig voneinander verwaltet!!!

Das heisst:
Die Werte beim Aufruf (genauer: die Variablennamen) sind unabhängig von denen in der Funktion selber!
Es kann also $wert1, $wert2 beim Aufruf stehen, aber in der Funktion heissen diese plötzlich $value1, $value2.

Das ist zulässig!!!

Da nun phpBB ein offenes System ist, hat man sich jedoch darauf verständigt, die Variablennamen beim Aufruf und in der Definition gleichlautend zu erstellen. Somit ist es im Nachgang einfacher, diese eindeutig zuzuordnen. Auch und gerade, wenn man selber MODs installiert.

Weil aber nun die Variablen unterschiedlich heissen können, ist es genau aus diesem Grund wichtig, daß alle Werte immer exakt in der gleichen Reihenfolge aufgeführt werden, damit diese auch wirklich dort ankommen, wo sie hin sollen. Dabei ist es, wie bereits erwähnt, unerheblich, in welcher Variable diese Werte gespeichert sind! Es kommt hierbei wirklich nur darauf an, daß die Werte, die an die Funktion übergeben werden, auch wirklich in diese Variablen übergeben werden, aus denen die Funktion die Werte verwendet.

In unserem obigen Beispiel würde demnach $wert2 in der Funktion den Wert der Variablen $wert1 erhalten, wenn die Funktion so aufgerufen würde:

Code: Alles auswählen

beispiel($wert2, $wert1);
Nochmals die Funktiondefinition:

Code: Alles auswählen

function beispiel($wert1, $wert2)
Es ist daher unerlässlich, bei der Installation eines MODs in der posting.php und includes/funktions_post.php, die die Funktion submit_post(); ( oder auf prepare_post(); ) verändern, genau darauf zu achten, in welcher Reihenfolge die Variablen stehen und an genau welcher Stelle neue Variablen hinzugefügt werden.

Die Folge sind Datensalat bis hin zu fehlerhaften Ausführungen oder gar einem Stillstand des Scripts und damit des Forums.

Also:
Immer etwas mehr Zeit nehmen, wenn man solch umfangreiche Funktionen und deren Aufrufe erweitert oder anpasst. Lieber zweimal hinschauen, also hinterher die schönsten und zunächst unerklärlichen Fehler zu erhalten.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten