2012-03-29 13 views
1
  1. Vergleichen Sie mit den beiden ähnlichen Beispielen und bitte sagen Sie mir warum?
  2. bitte erläutern Sie es deutlich. PHP-Funktion - vergleichen Sie mit den folgenden Beispielen

    function inc(&$value, $amount = 1) { 
        $value = $value + $amount; 
        echo $value; //21 
    } 
    
    $val = 20; 
    inc($val); 
    echo "<br>$val"; //21 
    
    echo "<hr>"; 
    
    function incSec(&$value, $amount = 1) { 
        $value = $value + $amount; 
        echo $value; //21 
    } 
    
    incSec($valSec = 20); 
    echo "<br>$valSec"; //20 
    

Ich versuche, zu testen, aber den Grund nicht bekommen kann.

+2

Formatieren/einrücken Ihren Code, um es leicht lesbare –

+0

was Sie testen wollen, und was sind Sie nicht immer? – Nishant

Antwort

0

Vermuten Sie bekommen einen Fehler mit diesen Zeilen:

incSec($valSec = 20); 

Dies ist auf die Funktion nicht vorbei $ VALSEC, es ist vorbei, die Ergebnis der Zuordnung von 20 bis $ VALSEC (in der Regel ein erfolgreiche Aufgabe). Der Wert dieses Ergebnisses ist 20 (angenommen Erfolg), aber es ist keine Variable, es ist nur ein Ergebnis.

Ihre incSec Funktion() definiert eine Variable als Verweis übergeben erwarten, aber man kann nur eine Variable, kein Ergebnis verweisen.

+0

Es wird kein Fehler im Anruf auftreten. PHP wird das Ergebnis der Zuweisung effektiv einer Variablen mit keinem Namen zuweisen und diese Variable mit keinem Namen als Verweis an die Funktion übergeben (mit anderen Worten, es speichert das Ergebnis der Zuweisung in einen Speicherort und übergeben Sie die Adresse dieses Speicherplatzes in die Funktion). Nachdem die Funktion zurückgegeben wurde, wird der an diesem Speicherort gespeicherte Wert einfach verworfen. –

+0

Sie könnten erhalten: "Strenge Standards: Nur Variablen sollten durch Verweis in C: \ xampp \ htdocs \ a.php in Zeile 20 übergeben werden" abhängig von der Version von PHP –

+0

Möglicherweise, aber es wäre nur eine Warnung. Ich habe diesen Code getestet und nicht einmal bekommen (php 5.3.8 auf Mac OS X) –

6

Zuerst wird das zweite Beispiel, das Sie ausgeben wird um die andere Art und Weise geschrieben: „21“ innerhalb der Funktion und „20“ in dem Hauptkörper - testen Sie es selbst.

Jetzt für die Exlanation ... Um mit zu beginnen, wird der Inkrementbetrag immer 1 sein, weil Sie einen expliziten Betrag in die Funktion nicht übergeben.

Im ersten Beispiel weisen Sie der Variablen einen Wert zu, übergeben diese Variable dann per Referenz an eine Funktion und in der Funktion erhöhen Sie den Wert. Die Funktion erhält den Parameter "20", erhöht den Wert um 1 und gibt das Ergebnis "21" aus. Nachdem die Funktion zurückgegeben wurde, wird der Wert (wie er durch Verweis übergeben wurde) jetzt erhöht - und eine weitere "21" wird gedruckt.

Im zweiten Beispiel weisen Sie 20 auf Ihre Variable und gelangen in die Funktion das Ergebnis dieser Zuordnung. Das Ergebnis wird 20 sein, aber es wird ein anderer Speicherort sein. Vom Standpunkt der Funktion erhält es nur einen By-Ref-Parameter mit dem Wert 20, inkrementiert es und gibt das Ergebnis aus - daher erhalten Sie "21". Wenn die Funktion zurückkehrt, drucken Sie dann den Wert Ihrer Variablen - die niemals in die Funktion übergeben wurde (und daher nie erhöht wurde) - daher wird "20" gedruckt.

+1

Bessere Erklärung als meine –

Verwandte Themen