服务端 - PHP - 基础知识之变量、常量和数据类型
一、变量
1. 概述
序号 |
内容 |
描述 |
1 |
解释 |
变量是用于存储数据的容器 |
2 |
定义方式 |
用$ 符。如$var_name |
3 |
变量类型 |
因为 php 是弱类型语言,不需要在定义变量前声明变量的类型,所以变量的类型由变量的值决定 |
4 |
赋值 |
用= 号。如$name="peter" |
5 |
传递方式 |
1.值传递:操作副本。将原变量的值赋值给一个新变量<br> 2.引用传递:控制指针。给原变量起一个别名 |
6 |
使变量变成引用传递 |
在变量前加& 取地址符。如&$name="Leo" |
7 |
可变变量 |
变量名称可以动态改变,变量名来自另一个变量 |
8 |
作用域 |
1.函数作用域:使用function 关键字创建的作用域,作用在函数作用域的变量有私有变量和静态变量。<br> 2.全局作用域:函数之外的变量生效范围,作用在全局作用域的变量有全局变量和超全局变量。 |
9 |
分类 |
1.私有变量:函数中定义的变量<br> 2.全局变量:函数之外定义的变量<br> 3.超全局变量:也叫预定义变量,访问不受作用域限制 |
10 |
过滤器 |
用于对来自非安全来源的数据(比如用户输入)进行验证和过滤 |
11 |
注意事项 |
变量已定义而未初始化,默认使用 NULL 进行赋值 |
2. 可变变量
序号 |
内容 |
描述 |
1 |
定义方式 |
在变量前再加一个$ 符。如$$name |
3. 私有变量
序号 |
内容 |
描述 |
1 |
解释 |
也叫动态变量,在函数中每一次都会自动初始化,并且无法在多次调用过程中保持不变 |
2 |
作用域 |
函数作用域 |
4. 静态变量
序号 |
内容 |
描述 |
1 |
解释 |
定义在函数内部,静态变量的值不会因为退出函数而销毁 |
2 |
定义方式 |
在变量前加static 关键字。如static $name |
3 |
作用域 |
函数作用域 |
4 |
特点 |
1.在定义时必须初始化,且只能初始化一次,只能初始化为字符值或常量,默认为’0’<br> 2.静态变量的值,可以在函数的多次调用中保持不变,即可带入下次调用中<br> 3.当程序执行离开函数作用域后,静态变量的值不丢失 |
5 |
应用场景 |
实现累加效果:当多次调用同一函数,且要求每次调用之间共享或保留某些变量的时候 |
5. 全局变量
序号 |
内容 |
描述 |
1 |
解释 |
函数之外定义的变量 |
2 |
作用域 |
全局作用域 |
3 |
函数作用域内使用全局变量的方式 |
1.使用 global 关键字<br> 2.使用$GLOBALS 超全局数组 |
6. 超全局变量
序号 |
变量 |
描述 |
1 |
$GLOBALS |
引用全局作用域中可用的全部变量 |
2 |
$_SERVER |
服务器和执行环境信息 |
3 |
$_GET |
HTTP GET 请求:通过 URL 参数传递给当前脚本的变量的数组 |
4 |
$_POST |
HTTP POST 请求: 将变量以关联数组形式传入当前脚本 |
5 |
$_FILES |
HTTP 文件上传变量,保存着上传文件的全部信息 |
6 |
$_REQUEST |
默认情况下包含了 $_GET ,$_POST 和 $_COOKIE 的数组 |
7 |
$_COOKIE |
通过 HTTP Cookies 方式传递给当前脚本的变量的数组 |
8 |
$_SESSION |
当前脚本可用 SESSION 变量的数组 |
9 |
$_ENV |
通过环境方式传递给当前脚本的变量的数组 |
7. 变量过滤器
序号 |
函数 |
描述 |
1 |
filter_list() |
查看系统中所有过滤器 |
2 |
filter_id() |
查看所有过滤器 id |
3 |
filter_var() |
过滤单个变量 |
4 |
filter_var_array() |
同时过滤多个变量 |
5 |
filter_has_var() |
检测是否存在指定的外部变量 |
6 |
filter_input() |
更安全的外部变量过滤器 |
7 |
filter_input_array() |
同时过滤多个外部变量 |
8. 代码示例
<?php
echo '<h3>';
echo "一、使用静态变量实现累加效果";
echo'</h3>';
$sum = function() {
static $n = 0;
$n += 1;
return $n;
};
echo $sum();
echo '<br>';
echo $sum();
echo '<br>';
echo $sum();
echo '<br>';
echo '<hr>';
echo '<h3>';
echo "二、函数作用域内使用全局变量的方式";
echo'</h3>';
echo '<h4>';
echo "1. 使用global关键字";
echo'</h4>';
$name = "小明1";
echo "我的名字叫" . $name;
function sayMyName1() {
global $name;
$name = "小红1";
echo '<br>';
echo "我的名字叫" . $name;
}
echo sayMyName1();
echo '<h4>';
echo "2. 使用\$GLOBALS超全局变量数组";
echo'</h4>';
$name = "小明2";
echo "我的名字叫" . $name;
function sayMyName2() {
$GLOBALS['name'] = "小红2";
echo '<br>';
echo "我的名字叫" . $GLOBALS['name'];
}
echo sayMyName2();
echo '<hr>';
echo '<h3>';
echo "三、使用变量过滤器过滤变量";
echo'</h3>';
echo '<h4>';
echo "1. 过滤单个变量";
echo'</h4>';
$n = 10;
if (filter_var($n, 257)) :
echo "已过滤1";
else :
echo "error2";
endif;
echo '<br>';
$n = 10.2;
if (filter_var($n, 257)) :
echo "已过滤1";
else :
echo "error2";
endif;
echo '<h4>';
echo "2. 同时过滤多个变量";
echo'</h4>';
echo "全部变量过滤成功";
$data = ["name"=>"Peter", "age"=>12, "email"=>"xiaoming@qq.com"];
$filters = [
"name"=>["filter"=>FILTER_VALIDATE_REGEXP, "options"=>["regexp"=>"/^P(.*)/"]],
"age"=>["filter"=>FILTER_VALIDATE_INT, "options"=>["min_range"=>10, "max_range"=>15]],
"email"=>FILTER_VALIDATE_EMAIL
];
echo '<pre>';
print_r(filter_var_array($data, $filters));
echo '</pre>';
echo "\$name变量过滤失败";
$data = ["name"=>"peter", "age"=>12, "email"=>"xiaoming@qq.com"];
$filters = [
"name"=>["filter"=>FILTER_VALIDATE_REGEXP, "options"=>["regexp"=>"/^P(.*)/"]],
"age"=>["filter"=>FILTER_VALIDATE_INT, "options"=>["min_range"=>10, "max_range"=>15]],
"email"=>FILTER_VALIDATE_EMAIL
];
echo '<pre>';
print_r(filter_var_array($data, $filters));
echo '</pre>';
echo '<h4>';
echo "3. 显示所有过滤器ID";
echo'</h4>';
echo '<table style="border: 1px solid black; border-collapse: collapse">';
foreach (filter_list() as $key => $value) {
echo '<tr style="border: 1px solid black">'.'<td style="border: 1px solid black">'.$value.'</td>'.'<td>'.filter_id($value).'</td>'.'</tr>';
}
echo '</table>';
?>
二、常量
1. 概述
序号 |
内容 |
描述 |
1 |
解释 |
常量是值的标识符,但值无法更变 |
2 |
定义方式 |
1.使用 define()函数:不能用在类中<br> 2.使用 const 关键字:可以用在类中,不能用在函数和流程控制中 |
3 |
作用域 |
不受限制 |
4 |
特点 |
1.创建时必须初始化<br>2.禁止更新和删除<br>3.不受作用域限制 |
5 |
注意事项 |
推荐使用大写字母加下划线命名 |
2. 预定义常量
- 预定义常量非常多,有许多与具体扩展相关,如
PDO
序号 |
预定义常量 |
描述 |
1 |
PHP_VERSION |
PHP 版本 |
2 |
PHP_MAXPATHLEN |
PHP 路径最大长度:1024 |
3 |
PHP_OS_FAMILY |
操作系统:Windows/Darwin/Linux |
4 |
PHP_SAPI |
web 服务器与 php 之间接口: apache2handler |
5 |
PHP_EOL |
行尾结束符 |
6 |
PHP_INT_MAX |
最大整数: 9223372036854775807 |
7 |
PHP_INT_MIN |
最小整数: -9223372036854775808 |
8 |
PHP_INT_SIZE |
整数宽度: 8 |
9 |
PHP_FLOAT_MAX |
最大浮点数:1.7976931348623E+308 |
10 |
PHP_FLOAT_MIN |
整小浮点数: 2.2250738585072E-308 |
11 |
DEFAULT_INCLUDE_PATH |
默认 PHP 命令路径 |
12 |
PHP_EXTENSION_DIR |
默认 PHP 扩展路径 |
13 |
E_ERROR |
运行时错误: 致命中断 |
14 |
E_PARSE |
语法解析错误: 致命中断 |
15 |
E_NOTICE |
运行时提示: 不中断 |
16 |
E_WARNING |
运行时警告: 不中断 |
17 |
E_ALL |
所有级别错误(除E_STRICT ) |
18 |
E_STRICT |
更加严格的错误处理机制,高于E_ALL |
19 |
TRUE |
布尔真 |
20 |
FALSE |
布尔假 |
21 |
NULL |
空 |
22 |
DIRECTORY_SEPARATOR |
目录分隔符 |
3. 魔术常量
- 魔术常量也属于”预定义常量”。所谓”魔术”, 是指常量的值, 会随它们在代码中的位置改变而改变
- 魔术常量不区分大小写, 但是推荐全部大写
序号 |
魔术常量 |
描述 |
1 |
__LINE__ |
文件中的当前行号 |
2 |
__FILE__ |
文件的完整路径和文件名 |
3 |
__DIR__ |
文件所在目录 |
4 |
__FUNCTION__ |
当前的函数名称 |
5 |
__CLASS__ |
当前类名称 |
6 |
__TRAIT__ |
当前Trait 名称 |
7 |
__METHOD__ |
当前类方法名称 |
8 |
__NAMESPACE__ |
当前命名空间名称 |
三、数据类型
序号 |
内容 |
描述 |
1 |
解释 |
固定大小内存的别名。给不同的数据分配合适的空间,确定合适的存储形式 |
2 |
特点 |
动态类型(弱类型)。不需要在使用变量前声明变量的类型,相同的变量可以用作不同的类型 |
3 |
分类 |
1.标量:字符串、整型、浮点型、布尔<br>2.复合:数组、对象<br>3.特殊:null <br>4.资源:resource |
4 |
判断 |
is_string() 、is_int() 、is_bool() 等 |
5 |
转换 |
strval() 、intval() 等 |
四、课程总结
- 今天学习了 PHP 的基础知识,通过上课认真听讲和认真完成老师布置的作业,使得我对 PHP 的理解和运用更加深入和熟悉。最主要的知识点是明白了变量、常量和数据类型的特点,以及了解并熟悉了变量、常量和数据类型的常用的操作。