Jörg Reinholz: Korrekturen

Beitrag lesen

Moin!

Jetzt habe ich doch selbst die Skriptstückchen und die Ausgaben schwer durcheinander gebracht. Es ist halt doch mühseelig, weil der Text in der Area wüst springt wenn ich das Programm mit ALT + TAC wechsle...

KORREKTUREN

hab das Script mal versucht in meine Funktion einzubauen und zwar zuerst so:

function kundenUebersicht1($mysqli, $UserCode=false, $UserRechte=false, $gesperrt=false, LIMIT, $offset) {

Die Paare mit den Ersatzwerten ($UserCode=false, $UserRechte=false, $gesperrt=false) müssten ganz recht stehen, sonst ordnet der Interpreter die Werte den falschen Variablen zu. Der nimmt nämlich einfach die Reihenfolge, in der diese eingegeben werden. Du kannst die nur von rechts nach links weglassen, also nicht $offset angeben und $UserCode weglassen ... Wie soll das gehen?

function kundenUebersicht1($mysqli, $offset, $UserCode=false, $UserRechte=false, $gesperrt=false)

Um das mal zu zeigen:

Du hast

<?php
### Murks: ###
function parameterTest ($foo='FOO', $bar) {
   echo 'in $bar steht "', $bar, "\"\n";
   echo 'in $foo steht "', $foo, "\"\n";
}
parameterTest ('BAR');

Erwartungsgemäß kommt ein Rudel Fehlermeldungen:

PHP Warning:  Missing argument 2 for parameterTest(), called in /tmp/test3.php on line 7 and defined in /tmp/test3.php on line 3

Warning: Missing argument 2 for parameterTest(), called in /tmp/test3.php on line 7 and defined in /tmp/test3.php on line 3
in $bar steht "PHP Notice:  Undefined variable: bar in /tmp/test3.php on line 4

Notice: Undefined variable: bar in /tmp/test3.php on line 4
"

und das von Dir nicht erwartete ("falsche") Ergebnis:

in $foo steht "BAR"

... welches aber aus PHP-Sicht richtig ist.

Drehen wir das rum:

<?php
function parameterTest ($bar, $foo='FOO') {
   echo 'in $bar steht "', $bar, "\"\n";
   echo 'in $foo steht "', $foo, "\"\n";
}
parameterTest ('BAR');

Erwartungsgemäße (richtige) Ausgaben

in $bar steht "BAR"
in $foo steht "FOO"

Dein 2. Fall wird also auch nicht immer funktionieren - sondern nur, wenn (und weil) Du alle Parameter tatsächlich übergibst (dann funktioniert auch Beispiel 1):

function kundenUebersicht1($mysqli, $UserCode=false, $UserRechte=false, $gesperrt=false, $LIMIT, $offset) {
	    $LIMIT = LIMIT;

Aber testen wir das mal:

<?php
define ('KONSTANTE', 'konstante');
parameterTest ('FOO');
function parameterTest ($foo, $bar='BAR') {
    echo 'in $foo steht "', $foo, "\"\n";
    echo 'in $bar steht "', $bar, "\"\n";
    echo 'in der Konstante steht: "', KONSTANTE, "\"\n";
}

Erwartungsgemäße Ausgaben:

in $foo steht "FOO"
in $bar steht "BAR"
in der Konstante steht: "konstante"

Warum kann ich das LIMIT nicht direkt mit die Funktion packen?

Wenn das mit meiner Konstante geht, dann gibt es keinen Grund, warum das mit LIMIT nicht gehen sollte. Ich vermute mal, Du hast in der Funktion wie folgt gearbeitet (statt der definierten KONSTANTE die Variable **$**KONSTANTE verwendet:)

<?php
define ('KONSTANTE', 'konstante');
parameterTest ('FOO');

function parameterTest ($foo, $bar='BAR') {
    echo 'in $foo steht "', $foo, "\"\n";
    echo 'in $bar steht "', $bar, "\"\n";
    ### Murks: ###
    echo 'in der Konstante steht: "', $KONSTANTE, "\"\n";
}

Erwartete Ausgaben und Fehlermeldungen:

in $foo steht "FOO"
in $bar steht "BAR"
in der Konstante steht: "PHP Notice:  Undefined variable: KONSTANTE in /tmp/test3.php on line 9

Notice: Undefined variable: KONSTANTE in /tmp/test3.php on line 9
"

Dem bist Du dann mit $LIMIT=LIMIT aus dem Weg gegangen, hast dabei aber bewiesen, dass die Konstante LIMIT (ohne "$" !) verfügbar war... Du musst diese nur richtig verwenden.

<?php
define ('KONSTANTE', 'konstante');
parameterTest ('FOO');

### Murks: ###
function parameterTest ($foo, $bar='BAR', $KONSTANTE ) {
    echo 'in $foo steht "', $foo, "\"\n";
    echo 'in $bar steht "', $bar, "\"\n";
    ### Murks: ###
    $KONSTANTE = KONSTANTE;
    ### Murks: ###
    echo 'in der Konstante steht: "', $KONSTANTE, "\"\n";
}

Was Murks ist, weil es zwar das erwartete Ergebnis bringt, zuvor aber völlig ohne Not mit Warnungen/Notizen ("Warnung/Notiz" nach Jörg Reinholz: "Programmfehler ohne Abbruch") um sich schmeisst:

PHP Warning:  Missing argument 3 for parameterTest(), called in /tmp/test3.php on line 3 and defined in /tmp/test3.php on line 6

Warning: Missing argument 3 for parameterTest(), called in /tmp/test3.php on line 3 and defined in /tmp/test3.php on line 6
in $foo steht "FOO"
in $bar steht "BAR"
in der Konstante steht: "konstante"

Jörg Reinholz