UNPKG

manual-php

Version:
133 lines (98 loc) 2.5 kB
# 变量范围 变量的范围即它定义的上下文背景,也就是它的生效范围。大部分的 PHP 变量只有一个单独的范围。这个单独的范围跨度同样包含了引入的文件。 ```php <?php require __DIR__ . '/example.php'; var_dump($foo); // string(3) "foo" ``` 上例中的 `example.php` 文件内容: ```php <?php $foo = 'foo'; ``` 在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。 ```php <?php /** * Try to return a variable from the function. * * @param void * @return void */ function foo() { return $foo; } $foo = 'foo'; var_dump(foo()); // NULL ``` PHP 中全局变量在函数中使用时必须将变量声明为 `global` ,在函数中声明了全局变量之后,对任一变量的所有引用都会指向其全局版本。 ```php <?php /** * Use global variables in function. * * @param void * @return string */ function foo(): string { global $foo; return $foo; } $foo = 'foo'; var_dump(foo()); // string(3) "foo" ``` 在局部函数范围内访问全局变量的第二个办法,是用特殊的 PHP 自定义 `$GLOBALS` 数组。 `$GLOBALS` 是一个关联数组,每一个变量为一个元素,键名对应变量名,值对应变量的内容。 `$GLOBALS` 之所以在全局范围内存在,是因为 `$GLOBALS` 是一个超全局变量。 ```php <?php /** * Use superglobal variables in function. * * @param void * @return string */ function foo(): string { return $GLOBALS['foo']; } $foo = 'foo'; var_dump(foo()); // string(3) "foo" ``` 变量范围的另一个重要特性是静态变量。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。 ```php <?php /** * Use static variables in function. * * @param void * @return int */ function foo(): int { static $foo = 0; return $foo++; } var_dump(foo()); // int(0) var_dump(foo()); // int(1) var_dump(foo()); // int(2) ``` 静态变量也提供了一种处理递归函数的方法。递归函数是一种调用自己的函数。写递归函数时要小心,因为可能会无穷递归下去。必须确保有充分的方法来中止递归。 ```php <?php /** * Use static variables in recursive function. * * @param void * @return void */ function foo() { static $foo = 0; $foo++; if ($foo < 10) { foo(); } } foo(); ```