博客列表 >变量与常量

变量与常量

default
default原创
2020年04月19日 16:51:18720浏览

1.变量和变量作用域

  • 变量作用域和超全局变量
  • 超全局变量无需定义
  • 现在是全局作用域
序号 作用域 描述
1 函数作用域 使用function关键字创建的作用域
2 全局作用域 函数之外的变量生效范围
  • php 中没有块作用域的概念, 这与其它编程语言不同, 请留意
  • 根据作用域不同, 变量可以分为三类:
序号 变量类型 描述
1 私有变量 函数中定义的变量
2 全局变量 函数之外定义的变量
3 超全局变量 也叫预定义变量,访问不受作用域限制

$siteName='php中文网'//这是简单的变量赋值

  • 在function中全局变量是不能在function使用所以,有两个办法
  • 1,global 把变量变成全局变量
  • 2,$GLOBALS[‘siteName’] 在系统中内置的全局变量里面去找
  • $GLOBALS 是数组 直接打印后能查看到页面中有多少个变量及页面信息
    1. function getInfo(){
    2. // 第一种
    3. // global $siteName;//把函数内的变量全局化 变成全局变量
    4. // $private=$siteName;
    5. // 第二种 在系统中内置的全局变量里面去找
    6. $private = $GLOBALS['siteName'];
    7. return $private;
    8. }
  • 超全局变量,也叫超全局数组,随系统加载,因此在所有脚本中均有定义,全局和函数中都可以访问
序号 变量名 描述
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 通过环境方式传递给当前脚本的变量的数组

2.静态变量

  • 定义在函数中的静态变量使用static修饰,并且与函数作用域绑定
  • 静态变量定义时必须初始化,且只能初始化一次,默认为0
  • 当程序执行离开函数作用域后,静态变量的值不丢失
  • 静态变量的值,可以在函数的多次调用中保持不变,即可带入下次调用中
  • 函数中静态变量遵循私有变量约束, 全局不可访问

应用场景

  • 当多次调用同一函数,且要求每次调用之间共享或保留某些变量的时候
  • 尽管全局变量也可以办到,但没必要, 采用局部静态变量更合适
  1. namespace ns1;
  2. function tset1() {
  3. // 私有变量也叫动态变量 每次调用他都会初始化
  4. $sum =0;
  5. $sum= $sum+1;
  6. return $sum;
  7. }
  8. echo tset1(),'<br>';
  9. echo tset1(),'<br>';
  10. echo tset1(),'<br>';
  11. echo tset1(),'<br>';
  12. echo '<hr>';
  13. //不同的目录下面有相同的文件名
  14. namespace ns2;
  15. function tset1() {
  16. // 在函数中如果把私有变量变成全局变量那么函数的计算值会累加 所以说 全局变量是静态变量 但是页面中防止变量冲突 不能用来函数调用免得造成全局污染 所以在函数中要定义静态变量
  17. //局部静态变量:只在函数第一次调用的时候被初始化,以后不会再被更新
  18. static $sum=0;
  19. $sum= $sum+1;
  20. return $sum;
  21. }
  22. echo tset1(),'<br>';
  23. echo tset1(),'<br>';
  24. echo tset1(),'<br>';
  25. echo tset1(),'<br>';

3.变量过滤器

变量过滤函数里面配置了很多的常量 :

  • 1.FILTER_VALIDATE_INT 整数类型
  • 2.FILTER_VALIDATE_EMAIL 验证邮箱类型
  • 3.FILTER_SANITIZE_STRING 检测字符串类型;
  • 4.FILTER_REQUIRE_SCALAR 单值变量
  • 5.FILTER_VALIDATE_URL 检测url类型

    变量过滤函数

  • 1.filter_var() //过滤单个变量;
  • 2.filter_var_array()过滤多个变量 也就是数组
  • 3.filter_has_var() 检测是否 存在指定的外部变量 ;
  • 4.filter_input()访问外部变量的过滤器;
  1. //变量过滤器
  2. //foreach () //遍历数组的
  3. foreach (filter_list() as $filter){
  4. echo $filter,'===>',filter_id($filter).'<br>';
  5. }
  6. //过滤单个变量是 filter_var
  7. //年龄 整数类型的
  8. $age=33;
  9. $options=['options'=>["min_range"=>'18','max_range'=>'60']];
  10. var_dump(filter_var($age,FILTER_VALIDATE_INT,$options));
  11. //过滤邮箱
  12. $email ='1@aa.cn';
  13. var_dump(filter_var($email,FILTER_VALIDATE_EMAIL));
  14. //过滤多个变量
  15. var_dump(filter_var_array([$age,$email],FILTER_VALIDATE_INT));
  16. //检测是否 存在指定的外部变量 filter_has_var();
  17. //INPUT_GET ,INPUT_POST,INPUT_COOKIE,INPUT_SESSION,INPUT_ENV
  18. filter_has_var(INPUT_GET,'P');
  19. echo '<hr>';
  20. //访问外部变量的过滤器
  21. $options=['options'=>["min_range"=>'1']];
  22. var_dump(filter_input(INPUT_GET,'p',FILTER_VALIDATE_INT,$options));
  23. echo filter_input(INPUT_GET,'p',FILTER_VALIDATE_INT,$options)?'321':'123';
  24. //同事验证多个外部变量 filter_var_array 就是提交过来的 接受方式用get
  25. echo '<hr>';
  26. $args=[
  27. 'username'=>FILTER_SANITIZE_STRING,
  28. 'email'=>FILTER_VALIDATE_EMAIL,
  29. 'age'=>[
  30. 'filter'=>FILTER_VALIDATE_INT,
  31. 'flags'=>FILTER_REQUIRE_SCALAR,//单值变量
  32. 'options'=> ['min_range'=>14, 'max_range'=>18],
  33. 'blog'=>FILTER_VALIDATE_URL,
  34. ]
  35. ];
  36. var_dump(filter_input_array(INPUT_GET,$args));

常量

1. 特征

序号 特征
1 常量前面没有美元符号$
2 常量创建时必须初始化
3 常量禁止更新和删除
4 常量不受作用域限制
5 推荐使用大写字母加下划线命名

2. 函数/关键字

序号 定义方式 描述
1 get_defined_constants() 查看系统所有常量
2 defined() 检测常量是否存在
3 define() 创建常量
4 const 关键字 创建常量
5 constant() 获取常量值
  • get_defined_constants(true): 常量分组打印,自定义常量在user分组
  • defined(): 返回布尔值

    3. 预定义常量

预定义常量非常多,有许多与具体扩展相关,如 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 目录分隔符

更多预定义常量:https://www.php.net/manual/zh/reserved.constants.php


系统中的常量

  1. //print_r(get_defined_constants(true));
  2. //[Core]分组常量 [filter] 过滤器常量 [hash]哈希常量 [json]json常量 加true 就是分组查看
  3. //常量只允许用标量来初始化 标量是 :字符串 数值布尔 null
  4. //php7+中常量可以赋值 数组
  5. //print_r(get_defined_constants(true));

自定义常量

  1. //这个函数是检测常量在不在
  2. define('APP_PATH',__DIR__.'/app/admin');

定义常量

  • 1常量有两种定义方式
  • 1.1.define(‘SHOP’,’买她’);
  • 1.2.const SHOPS = ‘买她’;
  • 2.常量不受作用域限制
  • 3.用函数创建常量是可以的不能用const()
  • 4.流程控制中define()能用 ,const不能
  • 5.const 可以用在类中创建一个类常量 类中 不能用define();
  • 6.常量数组的形式 //php7+中常量可以赋值 数组
  • 7.constant(‘’)//如果定义一个常量的名字为空他其实也是常量 但是打印的时候用echo 肯定打印不出来所要用constant();
  1. define('SHOP','买她');
  2. //常量不能反复定义
  3. const SHOPS = '买她';
  4. //常量不受作用域限制
  5. //用函数创建常量是可以的不能用const
  6. function shop(){
  7. echo SHOPS;
  8. echo '<hr>';
  9. }
  10. //shop();
  11. //流程控制中define能用 ,const不能
  12. if (true){
  13. define("COOKIE",'油炸鬼');
  14. // const FOOT='脚';
  15. echo COOKIE;
  16. echo '<hr>';
  17. }
  18. //const 可以用在类中创建一个类常量 类中 不能用define();
  19. class demo{
  20. const DEMO='新的';
  21. }
  22. echo demo::DEMO,'<hr>';
  23. /常量数组的形式
  24. const DB_LINKS = [
  25. 'host'=>'127.0.0.1',
  26. 'username'=>'root',
  27. 'password'=>'password',
  28. ];
  29. print_r(DB_LINKS, '<hr>');
  30. //常量的特殊情况
  31. //如果定义一个常量的名字为空他其实也是常量 但是打印的时候用echo 肯定打印不出来所要用constant();
  32. define('USER_NAME','我是常量');
  33. define('','我是常量');
  34. echo '';//这样是打印不出来的
  35. echo constant('');//这样是可以的
  36. echo PHP_VERSION;

魔术常量

  • 魔术常量也属于”预定义常量”, 比较特殊所有单独列出
  • 所谓”魔术”, 是指常量的值, 会随它们在代码中的位置改变而改变
  • 魔术常量不区分大小写, 但是推荐全部大写
序号 魔术常量 描述
1 __LINE__ 文件中的当前行号
2 __FILE__ 文件的完整路径和文件名
3 __DIR__ 文件所在目录
4 __FUNCTION__ 当前的函数名称
5 __CLASS__ 当前类名称
6 __TRAIT__ 当前Trait名称
7 __METHOD__ 当前类方法名称
8 __NAMESPACE__ 当前命名空间名称
  1. echo '当前行号'.__LINE__.'<br>';
  2. echo '当前文件'.__FILE__.'<br>';
  3. echo '当前目录'.__DIR__.'<br>';
  4. function name(){
  5. echo '当前方法名'.__FUNCTION__.'<br>';
  6. }
  7. name();
  8. class xinde{
  9. function index(){
  10. echo '当前方法名'.__CLASS__.'<br>';
  11. }
  12. }
  13. (new xinde)->index();
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议