Was sind PHP-Anführungszeichen? Einführung in das Zitieren in PHP (Codebeispiel)

不言
Freigeben: 2023-04-04 08:06:01
Original
2572 Leute haben es durchsucht

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;
Nach dem Login kopieren

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'
Nach dem Login kopieren

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)
Nach dem Login kopieren

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'
Nach dem Login kopieren

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 - 遍历数组的最后一个元素
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren

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.

Was als Referenz übergeben werden kann:

  • Variablen

  • Von einer Funktion zurückgegebene Referenz

Variablen als Referenz übergeben

function foo(&$var)
{
    $var++;
}

$a=5;
foo($a);

echo $a; // 6
Nach dem Login kopieren
Nach dem Login kopieren

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());
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren
unterscheidet sich von der Parameterreferenzübergabe. Bei der Referenzrückgabe muss das &-Symbol an zwei Stellen verwendet werden – was darauf hinweist, dass eine Referenz zurückgegeben wird, nicht eine übliche Kopie. Es weist auch darauf hin, dass $myValue als Referenz gebunden ist und nicht gewöhnliche Aufgabe.

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();
Nach dem Login kopieren

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
Nach dem Login kopieren

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"];
Nach dem Login kopieren

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!

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage