Blogger Information
Blog 7
fans 0
comment 0
visits 4133
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP-第二节 常量&变量作用域及过滤器
如今放弃
Original
754 people have browsed it

一:变量的作用域

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'=>...(复数)
Correcting teacher:GuanhuiGuanhui

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!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post