Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erklärung des Unterschieds zwischen dem Hinzufügen von @- und $-Symbolen vor Funktionen und Variablen in PHP

Detaillierte Erklärung des Unterschieds zwischen dem Hinzufügen von @- und $-Symbolen vor Funktionen und Variablen in PHP

伊谢尔伦
伊谢尔伦Original
2017-06-21 11:01:577455Durchsuche

@ Operator ist nur für Ausdruck gültig. Eine einfache Regel für Anfänger lautet: Wenn Sie irgendwo einen Wert erhalten können, stellen Sie ihm den @-Operator voran. Sie können es beispielsweise vor Variablen, Funktionen und include()-Aufrufen, Konstanten usw. platzieren. Es kann weder vor der Definition einer Funktion oder Klasse platziert noch in bedingten Strukturen wie if und foreach verwendet werden.
Das aktuelle Präfix „@“ Fehlerkontrolloperator deaktiviert sogar die Fehlerberichterstattung schwerwiegender Fehler, die zum Beenden des Skripts führen. Das heißt, wenn Sie mit „@“ die Fehlermeldung vor einem Funktionsaufruf unterdrücken, der nicht existiert oder vom falschen Typ ist, stirbt das Skript dort ohne Angabe des Grundes ab.

Für $ ist es unsere Schlüsselfrage

Grundform:

function &find_var($param) //这里用&在对象前面,作用为声明
{
    /* ...code... */
    return $found_var;
}
$foo =& find_var($bar); //这里用&,作用为联系变量
$foo->x = 2; //赋值给函数

Beispiel:

function &test()   
{   
static $b=0;//申明一个静态变量   
$b=$b+1;   
echo $b;   
return $b;   
}   
$a=test();//这条语句会输出$b的值为1,
$a=5;   
$a=test();//这条语句会输出$b的值为2 ,因为没有引用返回,$a=5,不对对象起赋值作用
$a=&test();//这条语句会输出$b的值为3 ,成功引用返回,下面的代码起作用
$a=5;   
$a=test();//这条语句会输出$b的值为6

Erklärung unten:
Was Sie auf diese Weise $a=test(); erhalten, ist eigentlich keine Funktionsreferenzrückgabe, die sich nicht von einem gewöhnlichen Funktionsaufruf unterscheidet. Was den Grund angeht: Dies ist eine Regelung von PHP
PHP legt fest, dass das, was durch $a=&test(); erhalten wird, die Referenzrückgabe der Funktion ist.
Was eine Referenzrückgabe ist (im PHP-Handbuch heißt es: Referenzrückgabe wird verwendet, wenn Sie eine Funktion verwenden möchten, um herauszufinden, an welche Variable die Referenz gebunden werden soll.)
Verwenden Sie das obige Beispiel zur Erklärung:
Durch den Aufruf einer Funktion in der Methode $a=test() wird der Wert der Funktion nur $a zugewiesen, und alle Änderungen an $a wirken sich nicht auf $b in der Funktion aus. Wie wäre es mit dem Aufruf der Funktion in der Methode $a=&test? () Methode? Seine Funktion besteht darin, die Speicheradresse der $b-Variablen in $b und die Speicheradresse der $a-Variablen an dieselbe Stelle zu verschieben und so das Äquivalent dieses Effekts zu erzeugen ($a=&b;). Ändern Sie den Wert von $a. Gleichzeitig ändert sich auch der Wert von $b, sodass nach der Ausführung von: $a=&test();
$a=5;
der Wert von $b 5 wird. .

Was bewirkt also das Hinzufügen des kaufmännischen Und-Zeichens vor der PHP-Funktion?

Was bedeutet das &-Symbol vor einer PHP-Variablen?
Schauen wir uns zunächst ein Beispiel an:

$foo = 321;
$bar = &$foo; 
$bar = 123;
print $foo;
//那么输出的结果将会是什么呢

Eine Änderung der neuen Variablen wirkt sich auf die ursprüngliche Variable aus . Dieser Zuweisungsvorgang ist komplizierter.
Hinweis: Nur benannte Variablen können anhand der Adresse zugewiesen werden. Das heißt, wenn Sie den Wert von $bar ändern, ändert sich auch der Wert von $foo.

Ein weiteres Beispiel:

$_GET[1] = 1;
function &a()
{
 $a = $_GET[1];
 return $a;
}
$x =& a();
$x = 'MoontoC';
echo $_GET[1]; // 此时这里会显示 MoontoC, 而不是最初赋值的1

Verstehen Sie die Bedeutung? Wenn Sie die Funktion zum Übertragen von Werten verwenden, müssen beide Seiten Referenzsymbole verwenden, um einen Sinn zu ergeben. Kann es wirklich zitiert werden? Wenn auf beiden Seiten kein Referenzsymbol vorhanden ist, wird kein falscher Inhalt erhalten, sondern der Inhalt wird als Wert und nicht als Referenz übergeben. Für Leute ohne Programmierkenntnisse ist es in der Tat schwierig zu verstehen, wie wichtig es ist, PHP zum ersten Mal zu übergeben. Sie haben das Gefühl, dass sie trotzdem bekommen können, was sie wollen, aber das ist in vielen Fällen nicht der Fall Obwohl sie das Gleiche bekommen, ist der Preis völlig unterschiedlich. Wenn ein Wert von 2 Millionen Wörtern als Wert übertragen wird, werden 4 Millionen Wörter gleichzeitig im Speicher gespeichert, was bedeutet, dass er doppelt so viel verbraucht Speicher, und die Übergabe einer Referenz ist nur eine Abkürzung, um sie zu übertragen.

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des Unterschieds zwischen dem Hinzufügen von @- und $-Symbolen vor Funktionen und Variablen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn