写在前面的话
我在上一篇提过了,我原本就是一名前端,迫于工作压力,也是初学PHP。也有动力不足的时候,那就告诫自己:对于不想做的事情,最好的办法就是快点做完。
什么是变量
- 变量是用于存储信息的”容器”。可以给PHP变量赋予某个值(x=1)或表达式(z=x+y)
- php语句和变量都是区分大小写的
变量的声明
- PHP 没有声明变量的命令。变量在第一次赋值给它的时候就被创建了。
- PHP是一门弱类型语言。(PHP 会根据变量的值,自动把变量转换为正确的数据类型。)
- 在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称。
变量规则
- 正确的变量必须使用$作为起始符号
- 变量名中不允许使用数字开始
php有效的标识,必须由以下三种字符组成:大小写的英文字母、下划线、数字,且不能以数字开始
注:
// 以下的写法虽然正确但无意义
$aaa = 'php.cn';
$_ = 888;;
$_123 = 999;
变量的输出
- 第一次接触.输出的时候,还不太明白,特意说明下,下面两个的输出结果是一样的。
<?php
$txt = "W3Schools.com";
echo "I love $txt!";//I love W3Schools.com!
?>
<?php
$txt = "W3Schools.com";
echo "I love " . $txt . "!";//I love W3Schools.com!
?>
变量的数据类型
- String(字符串)
$name = ‘Hello world!’;
- Integer(整型)
$price = 3890;
- Float(浮点型-浮点数是带小数部分的数字,或是指数形式。)
$x = 10.365;
- Boolean(布尔型)
$is5G = true;
echo gettype($is5G),’<hr>‘; - Array(数组)
$arr = [‘电脑’, 8000, ‘huawei’];
echo ‘<pre>‘.print_r($arr, true).’</pre>‘;
- Object(对象)
$obj = new stdClass;
$obj->email = ‘test@qq.cn’;
echo $obj->email . ‘<br>‘; - NULL(空值)
$num = null;
var_dump($num);
PHP变量作用域
- 变量作用域,也叫”变量范围”, 即定义变量时的上下文环境
- 变量作用域,通俗的说,就是变量的生效范围
- 一个变量必定属于一个作用域, 这个作用域也包括了当前作用域中引入其它文件
- 也有不受作用域限制的变量,例如超全局变量, 在程序中任何地方都是有定义的
- 函数作用域: php 中只有函数可以创建作用域, 函数之外的代码全部在全局空间中
序号 | 作用域 | 描述 |
---|---|---|
1 | 函数作用域 | 使用function 关键字创建的作用域 |
2 | 全局作用域 | 函数之外的变量生效范围 |
- php 中没有块作用域的概念, 这与其它编程语言不同, 请留意
- 根据作用域不同, 变量可以分为三类:
序号 | 变量类型 | 描述 |
---|---|---|
1 | 私有变量 | 函数中定义的变量 |
2 | 全局变量 | 函数之外定义的变量 |
3 | 超全局变量 | 也叫预定义变量,访问不受作用域限制 |
- 超全局变量,也叫超全局数组,随系统加载,因此在所有脚本中均有定义,全局和函数中都可以访问
序号 | 变量名 | 描述 |
---|---|---|
1 | $GLOBALS |
引用全局作用域中可用的全部变量 |
2 | $_SERVER |
服务器和执行环境信息 |
3 | $_GET |
HTTP GET 请求:通过 URL 参数传递给当前脚本的变量的数组 |
4 | $_POST |
HTTP POST 请求: 将变量以关联数组形式传入当前脚本 |
5 | $_FILES |
HTTP 文件上传变量,保存着上传文件的全部信息 |
6 | $_COOKIE |
通过 HTTP Cookies 方式传递给当前脚本的变量的数组 |
7 | $_SESSION |
当前脚本可用 SESSION 变量的数组 |
8 | $_REQUEST |
默认情况下包含了 $_GET ,$_POST 和 $_COOKIE 的数组 |
9 | $_ENV |
通过环境方式传递给当前脚本的变量的数组 |
// 声明函数: 同时也创建一个函数作用域
function getInfo() : string
{
// 定义了一个函数"私有变量"
// 1. 方法1: global
// global $siteName;
// 2. 使用超全局变量
$private = $GLOBALS['siteName'];
// 函数中可以直接访问超全局变量
echo $_SERVER['SCRIPT_NAME']. '<br>';
return $private;
}
echo getInfo();
echo $_SERVER['SCRIPT_NAME']. '<br>';
静态变量
基本常识
- 定义在函数中的静态变量使用
static
修饰,并且与函数作用域绑定 - 静态变量定义时必须初始化,且只能初始化一次,默认为
0
- 当程序执行离开函数作用域后,静态变量的值不丢失
- 静态变量的值,可以在函数的多次调用中保持不变,即可带入下次调用中
- 函数中静态变量遵循私有变量约束, 全局不可访问
应用场景
- 当多次调用同一函数,且要求每次调用之间共享或保留某些变量的时候
- 尽管全局变量也可以办到,但没必要, 采用局部静态变量更合适
# 静态变量
namespace ns1;
function test1(): float
{
// 私有变量,也叫动态变量,在函数中每一次都会自动初始化
// 并且无法在多次调用过程中保持不变
$sum = 0;
$sum = $sum + 1;
return $sum;
}
echo test1(), '<br>';
echo test1(), '<br>';
echo test1(), '<br>';
echo '<hr>';
// 命名空间
// 不同的目录下面可以有相同的文件名
namespace ns2;
// 全局变量
$sum = 0;
function test1(): float
{
global $sum;
$sum = $sum + 1;
return $sum;
}
echo test1(), '<br>';
echo test1(), '<br>';
echo test1(), '<br>';
echo '<hr>';
namespace ns3;
function test1(): float
{
// 局部静态变量: 只在函数第一次调用的时候被初始化,以后不会再被更新了
// 静态变量,可以理解为在函数中的"伪全局变量"
// 实现函数在多次调用的过程中共享数据
static $sum = 0;
$sum = $sum + 1;
return $sum;
}
echo test1(), '<br>';
echo test1(), '<br>';
echo test1(), '<br>';
echo '<hr>';
$num1 = 20;
// 变量的本质是数据共享
// 函数的本质是代码共享
echo $num1 + 40;
echo '<br>';
echo $num1 + 20;
echo '<br>';
echo $num1 + 90;
变量过滤器
- PHP 过滤器用于验证和过滤来自非安全来源的数据(外部数据——来自表单的输入数据、Cookies、Web services data、服务器变量、数据库查询结果)。
过滤器函数有哪些?
- filter_var() - 通过一个指定的过滤器来过滤单一的变量
- filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量
- filter_input - 获取一个输入变量,并对它进行过滤
- filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤