博客列表 >PHP-第二节 常量&变量作用域及过滤器

PHP-第二节 常量&变量作用域及过滤器

如今放弃
如今放弃原创
2020年07月12日 15:32:47841浏览

一:变量的作用域

1.全局作用域:写到了函数的外部的变量

  1. <?php
  2. //全局作用域:函数外部定义的变量,只能在函数外部进行访问
  3. $userName = '黄剑聪';
  4. echo $userName;
  5. ?>

2.函数作用域:函数外部定义的变量,只能在函数外部进行访问

代码演示访问函数外部的全局变量的两种方法

第一种:

  1. <?php
  2. //函数作用域:函数外部定义的变量,只能在函数外部进行访问
  3. $userName = '你好,黄剑聪';
  4. // echo $userName;
  5. function getinfo()
  6. {
  7. //访问函数外部的变量有两种方法
  8. //第一种,在函数中做一个声明用global
  9. global $userName;
  10. return $userName;
  11. }
  12. echo getinfo();
  13. ?>

第二种:

  1. <?php
  2. //函数作用域:函数外部定义的变量,只能在函数外部进行访问
  3. $userName = '黄剑聪';
  4. // echo $userName;
  5. function getinfo()
  6. {
  7. //访问函数外部的变量有两种方法
  8. //第二种,通过超全局变量$GLOBALS来访问
  9. //超全局变量, 不受作用域限制,可以在函数中直接访问
  10. return $GLOBALS ['userName'];
  11. }
  12. echo getinfo();
  13. ?>

二:常量

1:常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。推荐全部大写,多个单词之间使用下划线连接
  1. 常量前面没有美元符号($);
  2. 常量必须初始化;
  3. 常量不能删除
  4. 输出:echo constant('');
  5. 常量可以不用理会变量的作用域而在任何地方定义和访问;
  6. 常量一旦定义就不能被重新定义或者取消定义;
使用关键字 const 定义常量
  1. <?php
  2. //使用关键字 const 定义常量
  3. const APP_PATH = '/phpstudy_pro';
  4. echo APP_PATH;
  5. ?>
使用 define 定义常量
  1. <?php
  2. //使用关键字 define 定义常量
  3. define('APP_NAME', '人才管理系统');
  4. echo APP_NAME;
  5. ?>
备注:用 print_r(get_defined_constants(true))[‘user’] 可以获得所有已定义的常量列表。
2:预定义常量
  1. echo '版本号: ' . PHP_VERSION . '<br>';
  2. echo '操作系统: ' . PHP_OS_FAMILY . '<br>';
  3. echo '最大整数: ' . PHP_INT_MAX . '<br>';
  4. echo '最大浮点数: ' . PHP_FLOAT_MAX . '<br>';
  5. echo '目录分隔符: ' . DIRECTORY_SEPARATOR . '<hr>';
3:魔术常量
序号 魔术常量 描述
1 __LINE__ 文件中的当前行号
2 __FILE__ 文件的完整路径和文件名
3 __DIR__ 文件所在目录
4 __FUNCTION__ 当前的函数名称
5 __CLASS__ 当前类名称
6 __TRAIT__ 当前Trait名称
7 __METHOD__ 当前类方法名称
8 __NAMESPACE__ 当前命名空间名称
4:常量命名空间
  1. 命名空间: 解决了全局成员 的命名冲突问题
  2. 全局空间中的成员, 不允许重复定义
  3. 其实类与函数也是全局成员, 也不允许重复定义
  4. 全局成员: 常量, 类, 函数, 接口

以一个案例来解说:

  1. <?php
  2. namespace a {
  3. const SITE_NAME = 'PHP中文网';
  4. }
  5. namespace b {
  6. const SITE_NAME = 'www.php.cn';
  7. }
  8. //全局空间: 匿名空间
  9. namespace {
  10. echo \a\SITE_NAME, '<br>';
  11. echo \b\SITE_NAME, '<br>';
  12. }
  13. ?>

三:变量过滤器

  1. 过滤器简介:PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤。
  2. 查看当前php版本支持的预定义过滤器:foreach (filter_list() as $filter) {echo $filter . ' => ' .filter_id($filter);
1:过滤单个变量:filter_var(要过滤的变量, 过滤器常量)
  1. <?php
  2. //过滤单个变量:filter_var(要过滤的变量, 过滤器常量)
  3. $var = 35;
  4. $options = ['options'=>['min_range'=> 35, 'max_range'=> 60]];
  5. var_dump(filter_var($var, FILTER_VALIDATE_INT, $options));
  6. //如何给这个数值设定为一个范围:使用$options参数 min_range(最小值),max_range(最大值)
  7. echo '<hr>';
  8. $username = 'huang';
  9. var_dump(filter_var($username,FILTER_SANITIZE_STRING));
  10. ?>
2:验证多个变量:filter_var_array()
  1. <?php
  2. $a = 'ab';
  3. $b = 'cde';
  4. $arr = [$a, $b];
  5. var_dump(filter_var_array($arr, FILTER_SANITIZE_STRING));
  6. //echo '<hr>';
  7. $a = 10;
  8. $b = '90';
  9. $arr = [$a, $b];
  10. var_dump(filter_var_array($arr, FILTER_VALIDATE_INT));
  11. ?>
3:外部变量:filter_input(输入类型get/post, 变量名, 过滤器, 参数)
  1. <?php
  2. // 外部过滤器:filter_input(输入类型get/post, 变量名, 过滤器, 参数)
  3. // 使用GET参数来演示外部变量的获取与验证/过滤
  4. var_dump(filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT));
  5. ?>
4:同时验证多个外部变量
  1. <?php
  2. $args=[
  3. 'email'=>FILTER_SANITIZE_EMAIL,
  4. 'ags'=>['filter'=>FILTER_VALIDATE_INT, 'options'=>['min_range'=> 18, 'max_range'=> 60]],
  5. 'username'=>FILTER_SANITIZE_STRING,
  6. 'blog'=>FILTER_VALIDATE_URL,
  7. ];
  8. var_dump(filter_input_array(INPUT_GET, $args));
  9. ?>
  • 外部数据来源:

    | 序号 | 数据来源 | 描述 |
    | —— | ——————— | ——————————— |
    | 1 | 表单 | 来自表音的用户输入数据 |
    | 2 | Cookies | 来自浏览器中的 cookie |
    | 3 | 服务器变量 | 防止伪装的合法访问 |
    | 4 | Web 服务数据 | Web 请求的数据 |
    | 5 | 数据库查询结果 | 数据表中的数据并不可信 |

  • 常用的过滤器函数

    | 序号 | 函数 | 描述 |
    | —— | ——————————— | ———————————— |
    | 1 | filter_list() | |
    | 2 | filter_id() | |
    | 3 | filter_var() | 过滤单个变量 |
    | 4 | filter_var_array() | 过滤多个变量 |
    | 5 | filter_has_var() | 检测是否存在某个外部变量 |
    | 6 | filter_input() | 过滤单个外部变量 |
    | 7 | filter_input_array() | 过滤多个外部变量 |

  • 外部变量类型: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV

  • 过滤器主要分为二类: 验证过滤器, 清理过滤器

    9.1 验证过滤器常量

  • 验证过滤器: 又叫”验证器”, 主要用于数据的类型和格式验证

    | 序号 | 过滤器函数 | 描述 |
    | —— | ————————————- | ——————- |
    | 1 | FILTER_VALIDATE_INT | 验证整数 |
    | 2 | FILTER_VALIDATE_FLOAT | 浮点点验证 |
    | 3 | FILTER_VALIDATE_BOOLEAN | 验证布尔项 |
    | 4 | FILTER_VALIDATE_EMAIL | 验证邮箱 |
    | 5 | FILTER_VALIDATE_URL | 验证 URL 地址 |
    | 6 | FILTER_VALIDATE_IP | 验证 IP 地址 |
    | 7 | FILTER_VALIDATE_REGEXP | 正则验证 |

  • FILTER_VALIDATE_BOOLEAN: 布尔选项的返回值类型

    | 序号 | 返回值 | 描述 |
    | —— | ———- | ——————————————- |
    | 1 | true | “1”, “true”, “on” 和 “yes” |
    | 2 | false | “0”, “false”, “off”, “no”, “” |
    | 3 | null | 除以上情形外 |

    9.2 清理过滤器常量

  • 清理过滤器: 去掉非法字符,仅保留指定内容

    | 序号 | 过滤器函数 | 描述 |
    | —— | ———————————————- | —————————————————————— |
    | 1 | FILTER_UNSAFE_RAW | 保持原始数据 |
    | 2 | FILTER CALLBACK | 自定义函数过滤数据 |
    | 3 | FILTER_SANITIZE_STRING | 去除标签以及特殊字符:strip_tags() |
    | 4 | FILTER_SANITIZE_STRIPPED | “string” 过滤器别名 |
    | 5 | FILTER_SANITIZE_ENCODED | URL-encode 字符串,去除或编码特殊字符 |
    | 6 | FILTER_SANITIZE_SPECIAL_CHARS | HTML 转义字符, 等价于 htmlspecialchars() |
    | 7 | FILTER_SANITIZE_EMAIL | 仅保留邮箱地址的合法字符 |
    | 8 | FILTER_SANITIZE_URL | 仅保留合法的 URL, 必须从协议开始http/https |
    | 9 | FILTER_SANITIZE_NUMBER_INT | 仅保留合法的数字和正负号+- |
    | 10 | FILTER_SANITIZE_NUMBER_FLOAT | 仅保留合法的数字和正负号+- 以及指数 .,eE |
    | 11 | FILTER_SANITIZE_MAGIC_QUOTES | 等价于函数: addslashes() |

  • 选项与标志 选项与标志

    • 可以对过滤器设置选项和标志, 对数据进行更加精准的过滤处理
    • 选项与标志使用数组键名表示: 'options'=>[...], 'flags'=>...(复数)
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议