Php 简明教程
PHP - Variable Scope
在 PHP 中,变量的作用域是其被定义并可访问的上下文的程度。通常,任何没有循环或函数等的简单顺序 PHP 脚本都只有一个作用域。在 "<?php" 和 "?>" 标记内声明的任何变量都从其定义的点起对整个程序都可用。
In PHP, the scope of a variable is the context within which it is defined and accessible to the extent in which it is accessible. Generally, a simple sequential PHP script that doesn’t have any loop or a function etc., has a single scope. Any variable declared inside the "<?php" and "?>" tag is available throughout the program from the point of definition onwards.
根据作用域,PHP 变量可以是以下三种类型中的任何一种 −
Based on the scope, a PHP variable can be any of these three types −
主脚本中的变量也可以通过 include 或 require 语句引入任何其他脚本。
A variable in a main script is also made available to any other script incorporated with include or require statements.
Example
在下面的示例中,“test.php”脚本被包含在主脚本中。
In the following example, a "test.php" script is included in the main script.
main.php
main.php
<?php
$var=100;
include "test.php";
?>
test.php
test.php
<?php
echo "value of \$var in test.php : " . $var;
?>
当主脚本执行时,它将显示以下 output −
When the main script is executed, it will display the following output −
value of $var in test.php : 100
但是,当脚本具有用户定义的函数时,所有内部变量都有一个局部作用域。因此,无法在外部访问在一个函数内定义的变量。在函数外部(上方)定义的变量具有全局作用域。
However, when the script has a user defined function, any variable inside has a local scope. As a result, a variable defined inside a function can’t be accessed outside. Variables defined outside (above) the function have a global scope.
Example
请看以下示例:
Take a look at the following example −
<?php
$var=100; // global variable
function myfunction() {
$var1="Hello"; // local variable
echo "var=$var var1=$var1" . PHP_EOL;
}
myfunction();
echo "var=$var var1=$var1" . PHP_EOL;
?>
它将生成以下 output −
It will produce the following output −
var= var1=Hello
var=100 var1=
PHP Warning: Undefined variable $var in /home/cg/root/64504/main.php on line 5
PHP Warning: Undefined variable $var1 in /home/cg/root/64504/main.php on line 8
Note 全局变量不会自动在函数的局部作用域内可用。此外,无法在外部访问函数内的变量。
Note that a global variable is not automatically available within the local scope of a function. Also, the variable inside a function is not accessible outside.
The "global" Keyword
要使全局变量能够在函数的局部作用域内访问,应该通过使用“ global ”关键字显式地完成。
To enable access to a global variable inside local scope of a function, it should be explicitly done by using the "global" keyword.
Example
PHP 脚本如下所示 −
The PHP script is as follows −
<?php
$a=10;
$b=20;
echo "Global variables before function call: a = $a b = $b" . PHP_EOL;
function myfunction() {
global $a, $b;
$c=($a+$b)/2;
echo "inside function a = $a b = $b c = $c" . PHP_EOL;
$a=$a+10;
}
myfunction();
echo "Variables after function call: a = $a b = $b c = $c";
?>
它将生成以下 output −
It will produce the following output −
Global variables before function call: a = 10 b = 20
inside function a = 10 b = 20 c = 15
Variables after function call: a = 20 b = 20 c =
PHP Warning: Undefined variable $c in /home/cg/root/48499/main.php on line 12
现在可以在函数内处理全局变量。此外,对函数内全局变量所做的任何更改都将在全局名称空间中反映出来。
Global variables can now be processed inside the function. Moreover, any changes made to the global variables inside the function will be reflected in the global namespace.
$GLOBALS Array
PHP 将所有全局变量存储在一个称为 $GLOBALS 的关联数组中。变量的名称和值组成键值对。
PHP stores all the global variables in an associative array called $GLOBALS. The name and value of the variables form the key-value pair.
Example
在以下 PHP 脚本中,$GLOBALS 数组用于访问全局变量 −
In the following PHP script, $GLOBALS array is used to access global variables −
<?php
$a=10;
$b=20;
echo "Global variables before function call: a = $a b = $b" . PHP_EOL;
function myfunction() {
$c=($GLOBALS['a']+$GLOBALS['b'])/2;
echo "c = $c" . PHP_EOL;
$GLOBALS['a']+=10;
}
myfunction();
echo "Variables after function call: a = $a b = $b c = $c";
?>
它将生成以下 output −
It will produce the following output −
Global variables before function call: a = 10 b = 20
c = 15
PHP Warning: Undefined variable $c in C:\xampp\htdocs\hello.php on line 12
Variables after function call: a = 20 b = 20 c =
Static Variable
使用 static 关键字定义的变量不会在每次调用函数时初始化。此外,它保留其上一次调用的值。
A variable defined with static keyword is not initialized at every call to the function. Moreover, it retains its value of the previous call.
Example
请看以下示例:
Take a look at the following example −
<?php
function myfunction() {
static $x=0;
echo "x = $x" . PHP_EOL;
$x++;
}
for ($i=1; $i<=3; $i++) {
echo "call to function :$i : ";
myfunction();
}
?>
它将生成以下 output −
It will produce the following output −
call to function :1 : x = 0
call to function :2 : x = 1
call to function :3 : x = 2