PHP变量

变量是程序运行过程中,各种数据所存储的载体。程序根据变量的名称而找到对应的数据

自定义变量

以$开头,再加上一个合法的字符串,就成为自定义变量名,所谓合法,是指以字母或下划线开头,后面跟任意字母、数字、下划线。

变量的类型

由于PHP变量在使用之前并不需要像C语言那样事先定义变量类型,因此,变量一般是通过初始化来定义的,初始化时给变量赋一个值,PHP变量的类型由所赋值的类型决定。例如:

1
2
3
4
5
6
<?php
$a = 100; //$a为整型变量
$b = 3.14; //$b为浮点型变量
$c = "school"; //$c为字符串变量
$d = true; //$d为布尔值变量
?>
变量赋值的方式

(1)值赋值:将一个变量的值赋给另一个变量,例如:$a = $b。

(2)引用赋值:将一个变量的地址赋给另一个变量,例如:$a = & $b,将$b的地址赋给$a,让$a、$b共同占用一个存储单元。

1
2
3
4
5
6
7
<?php
$var = "hello";
$bar = & $var;
echo $bar; //输出:hello
$bar = "world";
echo $var; //输出:world
?>
变量的作用域

按作用域划分,变量可分为局部变量和全局变量。

(1)局部变量

​ 在主程序中或函数内部定义的变量称为局部变量。在主程序中定义的局部变量,其作用域局限于主程序,不能在函数内部使用;在函数内部定义的局部变量,其作用域局限于函数内部,不能在主程序中使用,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$my_var = "test"; //$my_var的作用域局限于主程序
function my_func()
{
$local_var = 123; //$local_var的作用域局限于当前函数
echo '$local_var= '.$local_var. "<br>"; //输出:$local_var=123
echo '$my_var= '.$my_var. "<br>"; //显示变量未定义
}
my_func();
echo '$local_var= '.$local_var. "<br>"; //显示变量未定义
echo '$my_var= '.$my_var. "<br>"; //输出:$my_var=test

?>

在函数内部定义的局部变量,又可分为自动变量和静态变量。在函数内部使用static声明的变量称为静态变量;否则,称为自动变量。自动变量于静态变量的区别在于:对于自动变量,每调用一次函数,都会为自动变量分配存储单元,函数调用结束,自动变量所占的存储单元全部释放。对于静态变量,第一次调用函数时,为静态变量分配存储单元,函数调用结束,静态变量所占的存储单元不会被释放。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
function vars()
{
$a = 0; //$a为动态变量
static $b = 0; //$b为静态变量
$a++;
$b++;
echo "$a,$b"."<br>";
}
for($i=1;$i<=3;$i++)
vars();
/*
运行结果:
1,1
1,2
1,3
第1次调用vars函数时,$a,$b的初始值为0,第1次调用结束时,$a=1,$b=1,返回主程序时,$a被释放,但$b不释放,仍保留原始值。第2次调用vars函数时,$a的初始值为0,$b的初始值为1,第2次调用结束时,$a=1,$b=2。第3次调用vars函数时,$a的初始值为0,$b的初始值为2,第3次调用结束时,$a=1,$b=3。
*/
?>

(2)全局变量

在主程序中定义的局部变量,如果想在函数内部使用,可以在函数内部使用global关键字声明为全局变量,否则视为另外定义一个新的局部变量。声明全局变量的语句为 global变量名;

声明全局变量,并没有为变量分配存储单元。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$a = 123; //此变量的作用域目前仅限于当前主程序
function fun()
{
$a = 456; //这个变量有别于前面那个$a,它们是两个不同的变量
echo $a."<br>"; //输出:456
global $a; //将主程序定义的$a声明为全局变量
echo $a."<br>"; //输出:123
$a = 789; //为主程序的$a赋值为789

}
fun();
echo $a; //输出:789
?>

预定义变量

PHP预设了若干个数组,其中存储了运行环境,用户输入数据等,称为预定义变量,其作用域是全局自动有效。预定义变量主要有以下几种。

服务器变量$_SERVER

服务器变量是由Web服务器创建的数组,其内容包括文件的头部信息、路径、脚本位置等信息,常用的几个服务器变量

服务器变量名 变量的存储内容
$_SERVER[‘HTTP_USER_AGENT’] 用户使用的浏览器信息
$_SERVER[‘HTTP_HOST’] host头信息,如localhost
$_SERVER[‘SERVER_NAME’] 服务器主机的名称,如localhost
$_SERVER[‘SERVER_ADDR’] 服务器的IP地址,如127.0.0.1
$_SERVER[‘SERVER_PORT’] 服务器的端口号,如80
$_SERVER[‘REMOTE_ADDR’] 当前浏览用户的IP地址
$_SERVER[‘DOCUMENT_ROOT’] 文档根目录
$_SERVER[‘SCRIPT_FILENAME’] 当前执行脚本的绝对路径名
$_SERVER[‘REMOTE_PORT’] 用户连接到服务器时使用的端口号
$_SERVER[‘QUERY_STRING’] URL中的请求字符串
$_SERVER[‘REQUEST_URI’] 访问此页面所需的URI
$_SERVER[‘SCRIPT_NAME’] 包含当前脚本的路径
$_SERVER[‘PHP_SELF’] 当前正在执行脚本的文件名
$_SERVER[‘REQUEST_TIME’] 请求开始时的时间戳
$_SERVER[‘REQUEST_TIME_FLOAT’] 同上,精确到微秒(PHP 5.4.0)
环境变量$_ENV

环境变量记录着PHP运行环境相关的信息,如系统名,系统路径等,可以通过$_ENV[‘成员变量名’]的方式来访问环境变量,常用的成员变量名OS、Path等。

如果PHP是测试版本,使用环境变量是可能会出现找不到环境变量的问题,打开php.ini配置文件,找到variables_order=”GPCS”,将该行改成variables_order=”EGPCS”,然后保存并重启Apache服务器。

全局变量$GLOBALS

$GLOBALS变量以数组形式记录所有已经定义的全局变量。可以通过$GLOBALS[‘变量名’]访问程序的所有全局变量,它比使用global访问全局变量更方便。例如:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$a = 1;
$b = 2;
function funct()
{
global $a; //使用global声明$a为全局变量
$a = $a + 10;
$GLOBALS['b'] = $GLOBALS['b']+10; //使用$GLOBALS声明$a为全局变量
}
funct();
echo "$a,$b";
?>

另外还有:$_COOKIE、$_GET、$_POST………………………..

外部变量

在PHP中,把程序中定义的变量叫做内部变量,而把表单中的变量(控件的名称)URL中的参数叫做外部变量,其值通过预定义变量$_GET、$_POST、$_REQUEST获得,

  • $_GET[“表单变量”]:取得从客户端以GET方式传递过来的表单变量value值
  • $_POST[“表单变量”]:取得从客户端以POST方式传递过来的表单变量value值
  • $_REQUEST[“表单变量”]:取得从客户端以任意方式传递过来的表单变量value值
    服务器接收数据示意图
  • $_REQUEST[“参数名”]:取得从客户端传递过来的参数值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>day3 分别用post和get的方式提交表单</title>
</head>
<body>
<form name="form1" method="post" action="">
用POST发送学号:
<input type="number" name="xh" id="xh" />
<input type="submit" name="button1" value="提交"/>
</form>
<form name="form2" method="get" action=""></br>
用GET发送姓名:
<input type="text" name="xm" id="xm" />
<input type="submit" name="button2" value="提交"/>
</form>
<?php
//使用$_POST接收表单变量的值
if(isset($_POST['button1']))
echo '该生学号:'.$_POST['xh'];
//使用$_GET接收表单变量的值
if(isset($_GET['button2']))
echo '该生姓名:'.$_GET['xm'];
?>
</body>
</html>