超全局变量
PHP4.1.X后就启用了超全局变量,可以在脚本的任意位置运行
PHP的超全局变量有:
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
$GLOBALS
$GLOBALS是PHP的一个超级全局变量组,在PHP脚本的全部作用域,也就是任意位置都可以直接访问到
$GLOBALS是一个包含了全部变量的全局组合数组。变量的名字就是数组的键
1 |
|
运行结果1
100
在这个例子中可以看到变量z并没有提前定义,而是使用$GLOBALS来进行创建超全局变量,变量z同样可以在函数外访问
$GLOBALS是PHP中最常用的超全局变量
$_SERVER
$_SERVER是一个包含了诸多信息的数组,例如信息头header,路径path,以及脚本的位置等
数组中的项目都是由WEB服务器创建的,不能够保证每个服务器都提供全部项目,而是根据服务器来进行动态的调整
1 |
|
下表列出了所有$_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>
$name = $_REQUEST['fname'];
echo $name;
</body>
</html>
上面这个例子就是向前端显示了一个输入字段Input和一个提交按钮submit的表单。当用户点击submit提交表单时,将会执行表单中action的属性指定的脚本文件,用POST方式来接受输入的内容
使用超全局变量$_POST可以收集表单中input字段的数据
$_GET
$_GET同样被广泛用于收集表单数据中,只需要将表单中的method改为get即可
1 |
|
运行结果1
Study PHP @ runoob.com
当用户点击链接时便会输出运行结果
PHP脚本的意思是,将参数subject和web发送至test_get.php中,就可以在test_get.php文件中使用$_GET变量来获取这些数据
test_get.php的代码1
2
3
echo "Study " . $_GET['subject'] . " @ " . $_GET['web'];
PHP循环
代码编写必不可少的除了判断,还有循环
PHP的循环基本类似于C语言
- while 只要条件成立,则循环代码块
- do…while 不管条件是否成立,都执行一次代码块,再进行条件判断
- for 循环代码块指定的次数
- foreach 根据数组中每个元素来循环代码块
while循环
语法1
2
3while(条件){
代码块;
}
例如循环输出1-51
2
3
4
5
6
7
$i=1;
while($i<=5)
{
echo "The number is " . $i . "\n";
$i++;
}
运行结果1
2
3
4
5The 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
5do
{
代码块;
}
while (条件);
还是类似的例子1
2
3
4
5
6
7
8
$i=1;
do
{
$i++;
echo "The number is " . $i . "\n";
}
while ($i<=5);
运行结果1
2
3
4
5The 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
4for (初始值; 条件; 增量)
{
代码块;
}
与C语言一摸一样1
2
3
4
5
for ($i=1; $i<=5; $i++)
{
echo "The number is " . $i . "\n";
}
运行结果1
2
3
4
5The number is 1
The number is 2
The number is 3
The number is 4
The number is 5
foreach循环
语法1
2
3
4foreach ($array as $value)
{
代码块;
}
每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值
例如1
2
3
4
5
6
$x=array("one","two","three");
foreach ($x as $value)
{
echo $value . "\n";
}
运行结果1
2
3one
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循环常用在遍历输出数组上