UNPKG

manual-php

Version:
110 lines (81 loc) 1.86 kB
# 引用做什么 PHP 的引用允许用两个变量来指向同一个内容。 ```php <?php $foo = 'foo'; $bar = &$foo; ``` 如果对一个未定义的变量进行引用赋值,引用参数传递或引用返回,则会自动创建该变量。 ```php <?php /** * Using references with undefined variables. * * @param string|null &$variable * @return void */ function foo(?string &$variable = null) { // } foo($foo); var_dump($foo); // NULL $foo = []; foo($foo['foo']); var_dump($foo); // array(1) { ["foo"]=> NULL } $foo = new stdClass(); foo($foo->foo); var_dump(property_exists($foo, 'foo')); // bool(true) ``` 如果在一个函数内部给一个声明为 `global` 的变量赋予一个引用,该引用只在函数内部可见。可以通过使用 `$GLOBALS` 超全局数组来避免这一点。 ```php <?php /** * Referencing global variables inside functions. * * @param bool $option * @return void */ function foo(bool $option) { global $foo, $bar; if (!$option) { $bar = &$foo; } else { $GLOBALS['bar'] = &$foo; } } $foo = 'foo'; $bar = 'bar'; foo(false); var_dump($bar); // string(3) "bar" foo(true); var_dump($bar); // string(3) "foo" ``` 如果在 `foreach` 语句中给一个具有引用的变量赋值,被引用的对象也被改变。 ```php <?php $foo = [2, 4, 5]; foreach ($foo as &$value) { $value += 1; } unset($value); var_dump($foo); // array(3) { [0]=> int(3) [1]=> int(5) [2]=> int(6) } ``` 可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。 ```php <?php /** * Passing function parameters by reference. * * @param int &$number * @return void */ function foo(int &$number) { $number++; } $foo = 5; foo($foo); var_dump($foo); // int(6) ```