Der Inhalt dieses Artikels befasst sich mit der Frage, was PHP-Zitat ist. Die in PHP zitierte Einführung (Codebeispiele) hat einen gewissen Referenzwert. Freunde in Not können darauf verweisen.
1. Was ist eine Referenz?
Referenz bezieht sich in PHP auf den Zugriff auf denselben Variableninhalt mit unterschiedlichen Namen.
Variablennamen und Variableninhalte in PHP sind unterschiedlich, sodass derselbe Inhalt unterschiedliche Namen haben kann.
Die nächste Analogie sind Unix-Dateinamen und die Dateien selbst – die Variablennamen sind die Verzeichniseinträge und die Variableninhalte sind die Dateien selbst. Referenzen können als Hardlinks in einem Unix-Dateisystem betrachtet werden.
Referenzen in PHP sind nicht wie Zeiger in C: Sie können beispielsweise keine Zeigerarithmetik auf sie anwenden. Bei der Referenz handelt es sich nicht um eine tatsächliche Speicheradresse, sondern um einen Symboltabellen-Alias.
2. Eigenschaften von Referenzen
PHPs Referenzen ermöglichen es, dass zwei Variablen auf denselben Inhalt verweisen.
$a =& $b;
Das bedeutet, dass $a und $b auf dieselbe Variable verweisen.
$a und $b sind hier genau gleich. Es ist nicht so, dass $a auf $b zeigt oder umgekehrt, sondern dass $a und $b auf die gleiche Stelle zeigen.Wenn ein Array mit einer Referenz kopiert wird, wird sein Wert nicht dereferenziert. Das Gleiche gilt für die Übergabe von Array-Werten an Funktionen.
$a = 'a'; $arr1 = [ 'a' => $a, 'b' => &$a, // $arr1['b'] 与 $a 指向同一个变量 ]; // 将 $arr1 传值赋值给 $arr2 $arr2 = $arr1; print_r($arr2); // $arr2 的值为 ['a' => 'a', 'b' => 'a'] // 修改 $a 的值为 'b' $a = 'b'; print_r($arr2); // $arr2 的值为 ['a' => 'a', 'b' => 'b'] function foo($arr){ // 将 $arr['b'] 的值改为 'c'; $arr['b'] = 'c'; } echo $a; // $a 的值为 'b' // 将 $arr1 传入函数 foo($arr1); echo $a; // $a 的值为 'c'
Wenn eine undefinierte Variable per Referenz zugewiesen, per Referenzparameter übergeben oder per Referenz zurückgegeben wird, wird die Variable automatisch erstellt.
// 定义函数 foo(),通过引用传递参数 function foo(&$var) { } foo($a); // 创建变量 $a,值为 NULL var_dump($a); // NULL foo($b['b']); // 创建数组 $b = ['b' => NULL] var_dump(array_key_exists('b', $b)); // bool(true) $c = new StdClass; foo($c->d); // 创建对象属性 $c->d = NULL var_dump(property_exists($c, 'd')); // bool(true)
Wenn eine Referenz einer als global deklarierten Variablen innerhalb einer Funktion zugewiesen wird, ist die Referenz nur innerhalb der Funktion sichtbar. Dies kann durch die Verwendung des Arrays $GLOBALS vermieden werden.
$var1 = 'var1'; $var2 = 'var2'; function global_references($use_globals) { global $var1, $var2; if (!$use_globals) { $var2 = & $var1; // $var2 只在函数内部可见 } else { $GLOBALS["var2"] = & $var1; // $GLOBALS["var2"]在全球范围内也可见 } } global_references(false); echo "var2 is set to '$var2'\n"; // var2 is set to 'var2' global_references(true); echo "var2 is set to '$var2'\n"; // var2 is set to 'var1'
Sie können sich global $var als die Abkürzung von $var =& $GLOBALS['var']; vorstellen. Wenn Sie also $var eine weitere Referenz zuweisen, ändert sich nur die Referenz auf die lokale Variable.
Weisen Sie einer Variablen mit einer Referenz in der foreach-Anweisung einen Wert zu, und das referenzierte Objekt wird ebenfalls geändert.
$ref = 0; $row = & $ref; foreach ([1, 2, 3] as $row) { // do something } echo $ref; // 3 - 遍历数组的最后一个元素
3. Übergabe als Referenz
Sie können eine Variable per Referenz an eine Funktion übergeben, sodass die Funktion den Wert ihres Parameters ändern kann.
function foo(&$var) { $var++; } $a=5; foo($a); echo $a; // 6
Beachten Sie, dass es im Funktionsaufruf keine Referenzsymbole gibt – nur in der Funktionsdefinition. Die Funktionsdefinition allein reicht aus, damit Parameter korrekt per Referenz übergeben werden.
Variablen
Von einer Funktion zurückgegebene Referenz
Variablen als Referenz übergeben
function foo(&$var) { $var++; } $a=5; foo($a); echo $a; // 6
Variablen als Referenz von einer Funktion übergeben Zurückgegeben Referenz
function foo(&$var) { $var++; echo $var; // 6 } function &bar() { $a = 5; return $a; } foo(bar());
Sie können keine Funktionen, Ausdrücke, Werte usw. als Referenz übergeben
function foo(&$var) { $var++; } function bar() // 注意,这个函数不返回引用 { $a = 5; return $a; } foo(bar()); // 自 PHP 5.0.5 起导致致命错误,自 PHP 5.1.1 起导致严格模式错误,自 PHP 7.0 起导致 notice 信息 foo($a = 5); // 表达式,不是变量。PHP Notice: Only variables should be passed by reference foo(5); // PHP Fatal error: Only variables can be passed by reference
4. Referenzrückgabe
Return by Reference kann verwendet werden, wenn Sie eine Funktion verwenden möchten, um die Variable zu finden, an die eine Referenz gebunden werden soll.
Verwenden Sie keine Rückgabereferenzen, um die Leistung zu steigern. Die Engine ist intelligent genug, um sich selbst zu optimieren. Geben Sie Referenzen nur zurück, wenn ein triftiger technischer Grund vorliegt!
class Foo { public $value = 42; public function &getValue() { return $this->value; } } $foo = new Foo; // $myValue 是 $obj->value 的引用. $myValue = &$foo->getValue(); // 将 $foo->value 修改为 2 $foo->value = 2; echo $myValue; // 2
Referenzrückgabe kann nur Variablen zurückgeben. Wenn Sie versuchen, eine Referenz von einer Funktion wie dieser zurückzugeben: return intval($this->value);, erhalten Sie eine Fehlermeldung, da die Funktion versucht, das Ergebnis eines Ausdrucks und nicht eine referenzierte Variable zurückzugeben. Sie können Referenzvariablen nur von Funktionen zurückgeben, eine andere Möglichkeit gibt es nicht.
class Foo { public $value = 42; public function &getValue() { return intval($this->value); // PHP Notice: Only variable references should be returned by reference } } $foo = new Foo; // $myValue 是 $obj->value 的引用. $myValue = &$foo->getValue();
5. Referenz aufheben
Wenn eine Referenz aufgehoben wird, wird lediglich die Bindung zwischen dem Variablennamen und dem Variableninhalt unterbrochen. Dies bedeutet nicht, dass die Variableninhalte zerstört werden.
$a = 1; $b = & $a; unset($a); echo $b; // 1
6. Es wurde festgestellt, dass
Viele PHP-Syntaxstrukturen über den Referenzmechanismus implementiert werden, sodass alles oben Genannte zur Referenzbindung auch für diese Strukturen gilt.
Globale Referenz
Beim Deklarieren einer Variablen mit globaler $var wird innerhalb der Funktion tatsächlich eine Referenz auf die globale Variable erstellt. Mit anderen Worten, der Effekt ist derselbe:
global $var; $var =& $GLOBALS["var"];
Das bedeutet, dass durch unset $var die globale Variable $GLOBALS["var"] nicht gelöscht wird.
$this
In einer Methode eines Objekts ist $this immer eine Referenz auf das Objekt, das es aufruft.
Das obige ist der detaillierte Inhalt vonWas sind PHP-Anführungszeichen? Einführung in das Zitieren in PHP (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!