服务端 - 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 的理解和运用更加深入和熟悉。最主要的知识点是明白了变量、常量和数据类型的特点,以及了解并熟悉了变量、常量和数据类型的常用的操作。
Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:没有完全照抄老师笔记 , 有了自己的总结, 非常棒
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!