超全局变量

PHP4.1.X后就启用了超全局变量,可以在脚本的任意位置运行

PHP的超全局变量有:

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

$GLOBALS

$GLOBALS是PHP的一个超级全局变量组,在PHP脚本的全部作用域,也就是任意位置都可以直接访问到

$GLOBALS是一个包含了全部变量的全局组合数组。变量的名字就是数组的键

1
2
3
4
5
6
7
8
9
10
11
<?php
$x = 75;
$y = 25;

function addition()
{
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}

addition();
echo $z;

运行结果

1
100

在这个例子中可以看到变量z并没有提前定义,而是使用$GLOBALS来进行创建超全局变量,变量z同样可以在函数外访问

$GLOBALS是PHP中最常用的超全局变量

$_SERVER

$_SERVER是一个包含了诸多信息的数组,例如信息头header,路径path,以及脚本的位置等

数组中的项目都是由WEB服务器创建的,不能够保证每个服务器都提供全部项目,而是根据服务器来进行动态的调整

1
2
3
4
5
6
7
8
9
10
11
12
<?php 
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];

下表列出了所有$_SERVER中的重要元素

描述 引入方法
$_SERVER[‘PHP_SELF’] 当前执行脚本的文件名,与document root有关
$_SERVER[‘GATEWAY_INTERFACE’] 服务器使用的CGI规范的版本
$_SERVER[‘SERVER_ADDR’] 当前运行脚本所在服务器的IP地址
$_SERVER[‘SERVER_NAME’] 当前运行脚本所在服务器的主机名
$_SERVER[‘SERVER_SOFTWARE’] 服务器标识字符串,在响应请求时的头信息中给出
$_SERVER[‘SERVER_PROTOCOL’] 请求页面时通信协议的名称和版本
$_SERVER[‘REQUEST_METHOD’] 访问页面使用的请求方法
$_SERVER[‘REQUEST_TIME’] 请求开始时的时间戳
$_SERVER[‘HTTP_ACCEPT’] 当前请求头中Accept项的内容,如果存在的话
$_SERVER[‘HTTP_HOST’] 当前请求头中Host:项的内容,如果存在的话
$_SERVER[‘HTTPS’] 如果脚本是通过HTTPS协议被访问,则被设为一个非空的值
$_SERVER[‘REMOTE_ADDR’] 当前页面的用户的IP地址
$_SERVER[‘REMOTE_HOST’] 当前页面的用户的主机名
$_SERVER[‘REMOTE_PORT’] 用户机器上连接到Web服务器所使用的端口号
$_SERVER[‘SCRIPT_FILENAME’] 当前执行脚本的绝对路径
$_SERVER[‘SCRIPT_URI’] URI 用来指定要访问的页面

还有很多参数不常用,具体可以参考一下手册

$_REQUEST

$_REQUEST用于收集HTML表单提交的数据
例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>

<?php
$name = $_REQUEST['fname'];
echo $name;
?>

</body>
</html>

avatar

上面这个例子就是向前端显示了一个输入字段Input和一个提交按钮submit的表单。当用户点击submit提交表单时,将会执行表单中action的属性指定的脚本文件,用POST方式来接受输入的内容

使用超全局变量$_POST可以收集表单中input字段的数据

$_GET

$_GET同样被广泛用于收集表单数据中,只需要将表单中的method改为get即可

1
2
3
4
5
6
7
8
<!DOCTYPE html>
<html>
<body>

<a href="test_get.php?subject=PHP&web=runoob.com">测试 $_GET</a>

</body>
</html>

运行结果

1
Study PHP @ runoob.com

当用户点击链接时便会输出运行结果

PHP脚本的意思是,将参数subject和web发送至test_get.php中,就可以在test_get.php文件中使用$_GET变量来获取这些数据
test_get.php的代码

1
2
3
<?php 
echo "Study " . $_GET['subject'] . " @ " . $_GET['web'];
?>

PHP循环

代码编写必不可少的除了判断,还有循环

PHP的循环基本类似于C语言

  • while 只要条件成立,则循环代码块
  • do…while 不管条件是否成立,都执行一次代码块,再进行条件判断
  • for 循环代码块指定的次数
  • foreach 根据数组中每个元素来循环代码块

while循环

语法

1
2
3
while(条件){
代码块;
}

例如循环输出1-5

1
2
3
4
5
6
7
<?php
$i=1;
while($i<=5)
{
echo "The number is " . $i . "\n";
$i++;
}

运行结果
1
2
3
4
5
The number is 1
The number is 2
The number is 3
The number is 4
The number is 5

do…while语句

语法

1
2
3
4
5
do
{
代码块;
}
while (条件);

还是类似的例子
1
2
3
4
5
6
7
8
<?php
$i=1;
do
{
$i++;
echo "The number is " . $i . "\n";
}
while ($i<=5);

运行结果
1
2
3
4
5
The number is 2
The number is 3
The number is 4
The number is 5
The number is 6

这个例子中将i++与echo调换了顺序来说明do…while循环

for循环

语法

1
2
3
4
for (初始值; 条件; 增量)
{
代码块;
}

与C语言一摸一样

1
2
3
4
5
<?php
for ($i=1; $i<=5; $i++)
{
echo "The number is " . $i . "\n";
}

运行结果
1
2
3
4
5
The number is 1
The number is 2
The number is 3
The number is 4
The number is 5

foreach循环

语法

1
2
3
4
foreach ($array as $value)
{
代码块;
}

每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值

例如

1
2
3
4
5
6
<?php
$x=array("one","two","three");
foreach ($x as $value)
{
echo $value . "\n";
}

运行结果
1
2
3
one
two
three

总结

1.$GLOBALS是PHP最常见和常用的超全局变量,我的理解可以将其理解为JAVA中的object类,虽然方法和概念有所不同,但是思路基本一致,都是覆盖了整个编程范围

2.$_SERVER中的项目是由Web服务器创建的,不是所有服务器都包含了全部的项目,是根据服务器进行灵活变动的

3.$_REQUEST主要是用于收集HTML表单提交的内容,默认是post方式

4.$_POST同样应用于收集表单数据,$_GET也一样,只不过两者方式不同,一种是以POST方式接受数据,一种则是以GET的方式来接受数据

5.在编写循环语句时,要注意终止条件是否满足要求,避免出现死循环的现象

6.在事先已经确定好要循环多少次时,使用for循环最佳,不确定时使用while循环配合continue和break来终止循环,foreach循环常用在遍历输出数组上