上一篇文章已经学习了PHP的数据类型,今天将学习新的内容:变量。
定义
PHP 中变量用一个美元符号后面跟变量名来表示(如$a),变量名是严格区分大小写的,并且不能以数字开头。
<?php
$a = 1;
$b = 'test';
$c = [1, 2, 3];
$4d = 2;//非法变量名,以数字开头
预定义变量
像上面的例子这种是我们自定义的变量,在PHP中有一些已经定义好的变量称之为预定义变量。利用这些预定义变量我们可以处理很多问题、实现很多功能,比如通过$_GET、$_POST获取用户输入的数据、$_SERVER获取服务器和执行环境信息等等。接下来我们学习一下几个预定义变量。
$_SERVER
$_SERVER可以获取服务器和执行环境信息,下面配合示例进行简单介绍,如果想了解它包含的所有信息可以直接打印$_SERVER即可。
<?php
var_dump($_SERVER['SERVER_NAME']);//域名,结果:string 'a.com'
var_dump($_SERVER['SERVER_PORT']);//端口,结果:string '80'
var_dump($_SERVER['REQUEST_METHOD']);//请求方式,结果:string 'GET'
var_dump($_SERVER['REQUEST_URI']);//请求的URI,结果:/1.php
输出结果
$_GET
它是一个通过 URL 参数(又叫 query string)传递给当前脚本的变量的数组。
<?php
var_dump($_GET);
输出结果
可以看到我们通过URL的方式传递的两个参数服务器都接收到了。
$_POST
当POST请求的Content-type是application/x-www-form-urlencoded 或 multipart/form-data 时,会将变量以关联数组形式传入当前变量。
#示例,先创建1.php文件用于提交数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传Demo</title>
</head>
<body>
<form action="/2.php" method="post" enctype="multipart/form-data">
账号:<input name="account"><br/>
密码:<input name="password"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
创建2.php接收数据
<?php
var_dump($_POST);
访问1.php,填写并提交数据
提交后会自动跳转至2.php,执行结果如下
$_REQUEST
包含了$_GET,$_POST 和 $_COOKIE 的数组。跟上面的示例差不多,这里就不再演示了。
$_COOKIE
通过http方式请求时,如果有携带cookie,则会传递到这个变量中。
$_SESSION
session是一种存贮机制,$_SESSION变量可以获取到session的所有数据。
$_FILES
获取当前上传文件的相关信息,如名称、类型、大小、临时存放路径等。
#示例,先创建1.php文件,用于上传文件。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传Demo</title>
</head>
<body>
<form action="/2.php" method="post" enctype="multipart/form-data">
<label for="fileUpload">选择文件:</label>
<input type="file" id="fileUpload" name="file">
<input type="submit" value="上传文件">
</form>
</body>
</html>
创建2.php文件用于接收上传的文件。
<?php
var_dump($_FILES);
访问1.php,并选择文件上传
点击上传之后会自动跳转到2.php,结果如下
变量作用域
变量的作用域是定义该变量的上下文。PHP 有函数作用域和全局作用域。在函数之外定义的任何变量都仅限于全局作用域。该怎么理解这句话呢,也就是说有函数作用域和全局作用域,函数之外定义的变量只能在全局作用域使用(即函数之外使用)。我们通过下面的例子辅助理解。
全局作用域变量,函数内部无法使用
<?php
$a = 2;
function test() {
echo $a;
}
test();
结果
可以看到报错了:变量没有定义。
global
关键字
如果我们要使用这个$a,则需要使用到global关键字:global关键字用于将变量从全局作用域绑定到局部作用域。将创建引用同名全局变量的局部变量。如果全局变量不存在,则将在全局作用域内创建该变量并赋值为 null
。
#示例 使用global关键字
<?php
$a = 2;
function test() {
global $a;
echo $a;
}
test();
执行结果
static
变量
变量作用域的另一个重要特性是 static 变量。静态变量仅在局部函数作用域中存在,但当程序执行离开此作用域时,其值并不丢失。
#示例,非静态变量例子
<?php
function test() {
$a = 2;
echo $a . ' -- ';
$a++;
}
//执行5次
test();test();test();test();test();
执行结果
2 -- 2 -- 2 -- 2 -- 2 --
由于每次调用test方法,变量a都会重新赋值,所以执行结果都一样。
#示例,静态变量例子
<?php
function test() {
static $a = 2;
echo $a . ' -- ';
$a++;
}
//执行5次
test();test();test();test();test();
执行结果
2 -- 3 -- 4 -- 5 -- 6 --
使用static关键字声明使得变量a成为了静态变量,因此它只会在第一次调用的时候执行初始化(即a=2)。
可变变量
定义:一个变量的变量名可以动态的设置。其实就是使用变量作为另外一个变量名。
<?php
$a = 'test';
$$a = '可变变量';
echo $$a . PHP_EOL;
//其实就是
echo $test;
执行结果
可变变量
可变变量
完结
如果你在阅读这篇文章时有所收获,请不要忘记点赞评论加关注,你的支持是我创作的最大动力。当然,如果你在文中发现了疏漏之处,或是有着其他的见解,欢迎私信与我交流。
我是老卢,一个热爱分享、不断探索的知识旅者。