博客列表 >PHP变量常量及过滤器细说

PHP变量常量及过滤器细说

G
G原创
2020年11月19日 17:20:04978浏览

PHP 入门细说 1

变量数据类型的自动转换

  1. 自动类型转换

    自动类型转换是指,计算机或编程语言解释器,在计算两个或两个以上不同类型的变量时,会自动将两个变量转换为可计算的变量,来达到计算的结果。
    PS:自动类型转换,不会改变原变量的变量类型。
    常见类型可分为:
    ① 字符串和整形
    ② 字符串和浮点型
    ③null 参与混合运算时的结果
    ④ 布尔型truefalse参与混合运算时的结果

  1. // 变量类型的自动转换:
  2. $page = "1000pages";
  3. @$page += 50;
  4. var_dump($page);
  5. echo "<br>";
  6. @$page += 22.66;
  7. var_dump($page);
  8. echo "<br>";
  9. @$num = $page + null; //null = 0
  10. var_dump($num);
  11. echo "<br>";
  12. @$num = $page + true;//true = 1
  13. var_dump($num);
  14. echo "<br>";
  15. @$num = $page + false;
  16. var_dump($num);
  17. echo "<br>"; //false = 0

2. 强制类型转换

强制类型通常是程序员对数据强制进行转换的结果。
语法:$变量 = (想要转换的变量类型)$想要转换的变量

  1. $price = 100;
  2. $goods = (string)$price;
  3. var_dump($goods);
  4. //输出结果为: string(3) "100"

变量的作用域

变量的作用域:其实就是变量的生效范围,作用域就是查找变量的工具。这点类似于常量的空间。但是有有所不同。
变量的作用域通常可以分为: ① 全局变量 【外部变量】 ② 局部变量 【内部变量】

  • 局部变量:
  1. // 1.生成一个变量
  2. function name()
  3. {
  4. $username = "GGGG";
  5. $email = "12346789@qq.com";
  6. echo "用户名是:$username,他的邮箱是:$email";
  7. }
  8. // 调用一下变量以输出内部内容
  9. name();
  10. // 在函数外部调用函数内部变量:
  11. echo $username; // 非法访问,在函数外部不能访问到局部变量: Undefined variable: username

有没有什么方法能在函数外部调用函数内部的变量呢? ====> 将函数赋值给一个变量来输出,同时函数内部使用return来返回内部函数的执行结果。

  • 全局变量

    是直接定义在函数外部的变量,可供全局调用。但不能在函数内部调用。

  1. $username = "gggg";
  2. $email = "4546548964563@163.com";
  3. $phone = "12315456464";
  4. $price = 1325456;
  5. $goods = "Iphone 12 pro";
  6. // 是定义在函数外部的变量
  7. function name();
  8. {.......};

如果想在函数内部引用全局变量,就需要使用到一个函数:GLOABALS

GLOBALS语法:$GLOBALS['新变量'] = $GLOBALS['全局变量']
这里是将全局变量赋值给一个新变量,最后通过引用函数,再输出这个新函数即可完成通过函数输出全局变量。

  1. function user()
  2. {
  3. $GLOBALS['username'] = $GLOBALS['username'].$GLOBALS['email'];
  4. }
  5. user();
  6. echo $username;

常量知识细说

PHP 常量:用于数据计算固定的值。
常量只能是:标量类型【整形、字符串、浮点型、布尔型】
常量 PS:
① 常量必须初始化(初始化:第一次赋值)
② 类常量只能使用 const 定义
③ 常量名推荐使用全部大写
④ 多个单词之间使用_连接
⑤ 常量不受作用域的限制
⑥ 常量不能重新被定义【重复声明定义】或取消定义【unset 弹出等】等
⑦ 常量定义推荐使用 const 来定义

constdefine定义常量的区别:

const定义常量和define定义一个常量的区别:
const是一个语言结构,而define是一个函数,可以通过第三个参数来设置是否大小写敏感的问题。
define()语法:define('常量名', 常量值, true);true 表示大小写不敏感,默认为 false
它们的区别:
①const 是一个语言结构;而 define 是一个函数
②const 简单易读,编译时要比 define 快很多。
③const 可在类中使用,用于类成员常量定义,定义后不可修改;define 不能在类中使用,可用于全局变量
④const 是在编译时定义,因此必须处于最顶端的作用区域,不能在函数,循环及 if 条件中使用;而 define 是函数,也就是能调用函数的地方都可以使用
⑤const 只能用普通的常量名,define 常量名中可以有表达式
⑥const 定义的常量只能是静态常量,define 可以是任意表达式

  1. // 定义一个常量:
  2. // 常量必须初始化:
  3. const APP_PATH = '/homework/demo3.php';
  4. // 定义一个常量的另外一种方式:使用define函数来定义
  5. // define(`常量名`,`常量值`)
  6. define('PATH','/demo3.php');
  7. // 常量的访问:
  8. echo APP_PATH;
  9. echo '<br>';
  10. // 通过赋值一个常量给一个变量,然后访问变量也可以
  11. $name = APP_PATH;
  12. echo $name;
  13. echo '<br>';
  14. // 在类常量之中,常量只能通过const来定义。
  15. class User
  16. {
  17. const USER_EMAIL = "1245456@163.com";
  18. }
  19. echo '<br>';
  20. // 常量不能被重复定义,或被取消定义
  21. // 重复定义:
  22. // const APP_PATH = "/WWW"; //Constant APP_PATH already defined
  23. // unset(APP_PATH); //syntax error, unexpected ')'
  24. // 常量不受作用域的限制:也就是说常量可以在任何地方使用或被调用
  25. function name()
  26. {
  27. return APP_PATH;
  28. }
  29. echo name();

预定义常量

  1. echo 'PHP版本号:'.PHP_VERSION.'<br>';
  2. echo '您的操作系统是:'.PHP_OS_FAMILY.'<br>';
  3. echo '环境变量的目录列表的分隔符:'.PATH_SEPARATOR.'<br>';
  4. echo '目录分割符:'.DIRECTORY_SEPARATOR.'<br>';
  5. echo '最大整数:'.PHP_INT_MAX.'<br>';
  6. echo '最大浮点数:'.PHP_FLOAT_MAX.'<br>';

and so on…….

PS:根据位置的变化而变化
几个常见的魔术常量:

常量名 描述
__LINE__ 文件中的当前行号
__FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名.
__DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。
__FUNCTION__ 当前函数的名称。匿名函数则为 {closure}
__CLASS__ 当前类的名称。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 CLASS 对 trait 也起作用。当用在 trait 方法中时,CLASS 是调用 trait 方法的类的名字。
__TRAIT__ Trait 的名字。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
__METHOD__ 类的方法名。
__NAMESPACE__ 当前命名空间的名称。
ClassName::class 完整的类名,参见 ::class。
  1. // 魔术常量
  2. echo '当前代码所在的行数为:'.__LINE__.'<br>';
  3. echo '当前文件的完整路径和文件名:'.__FILE__.'<br>';
  4. echo '文件所在的目录:'.__DIR__.'<br>';
  5. function demo()
  6. {
  7. echo '当前函数名为:'.__FUNCTION__;
  8. }
  9. demo();
  10. echo '<br>';

常量的命名空间

命名空间的作用是什么:是为了解决常量名复用的问题,常量是全局成员,最大的问题是命名冲突,引入命名空间 针对的是全局成员,在不同的命名空间内,可以重复命名一个常量。
如何创建一个命名空间?
使用namespace 空间名来创建
PS:
① 全局空间内的成员不允许重复定义
② 命名空间外不允许编写程序代码
那些可以使用命名空间,或被存放在命名空间内:
① 常量
② 函数
③ 类[借口]

  1. // 创建一个命名空间
  2. namespace name{
  3. const APP_PATH = "/WWW";
  4. }
  5. // 创建第二个命名空间
  6. namespace user{
  7. const APP_PATH = "/blog/index.php";
  8. // 输出name命名空间内的APP_PATH
  9. echo \name\APP_PATH;
  10. echo'<br>';
  11. }
  12. // 命名空间外,不能编写代码
  13. // echo'<br>'; // No code may exist outside of namespace {}
  14. // 创建一个全局空间:
  15. namespace {
  16. // 全局空间内的成员不允许重复定义。
  17. // const APP_PATH;
  18. // const APP_PATH; //重复定义一个常量成员,会报错 syntax error, unexpected
  19. // 打印上述两个命名空间内的成员
  20. echo \name\APP_PATH;
  21. echo'<br>';
  22. echo \USER\APP_PATH;
  23. echo'<br>';
  24. }

变量的过滤器

过滤器函数:filter_var()filter_var_array()

filter_var():filter_var(var,filter,options[可选])
返回值: 返回过滤后的值,否则返回 false

filter_var_array():获取多个变量并过滤它们filter_var_array(array $data, filter)
返回值: 返回过滤后的值,否则返回 false

过滤的同时会将字符转换成为我们制定的的过滤方法的类型

  1. // 将过滤方法遍历出来:
  2. foreach (filter_list() as $filter)
  3. {
  4. echo $filter . "=>" . filter_id($filter).'<br>';
  5. }

过滤外部变量:通过 http get/post 请求发送过来数据,过滤表单数据
同时验证多个外部变量 filter_input_array(输入类型get/post,args规定了过滤器参数数组,键是变量名,值就是过滤器) > filter_input()
使用 get 参数来演示外部变量的获取与过滤
filter_input(输入类型 get/post,变量名,filter)

  1. <?php
  2. // 将年龄15-30岁的过滤出来,不符合的淘汰
  3. $age = '25';
  4. $min = 15;
  5. $max = 30;
  6. // 设置可选方法options
  7. $options = array("options"=>array("min_range"=>$min,"max_range"=>$max));
  8. $age = filter_var($age,257,$options); //257 对应的过滤方法是int,可在filter中查看
  9. var_dump($age);//输出结果 int(25);
  10. // 过滤的同时会将字符转换成为我们制定的的过滤方法的类型
  11. $email = '42454654@qq.com';
  12. VAR_DUMP(filter_var($email,FILTER_VALIDATE_EMAIL));
  13. echo"<hr>";
  14. if(!$age) //取反
  15. {
  16. echo 'your age is not up to our requirements';
  17. }else{
  18. echo '年龄符合要求';
  19. }
  20. ECHO '<hr>';
  21. // filter_var_array(array $data, filter)获取多个变量并过滤它们,返回值: 返回过滤后的值,否则返回false
  22. ECHO '<hr>';
  23. $a = 10;
  24. $b = '90';
  25. $arr = [$a,$b];
  26. VAR_DUMP(filter_var_array($arr,FILTER_VALIDATE_INT));
  27. /**
  28. * 过滤外部变量:通过http get/post请求发送过来数据,过滤表单数据
  29. *同时验证多个外部变量 filter_input_array(输入类型get/post,args规定了过滤器参数数组,键是变量名,值就是过滤器)
  30. * filter_input()
  31. *使用get参数来演示外部变量的获取与过滤
  32. */
  33. // echo 'id = ' . $_GET['id'];
  34. $args = [
  35. "username" => FILTER_SANITIZE_STRING,
  36. "age" =>FILTER_VALIDATE_INT,
  37. "blog_url" =>FILTER_VALIDATE_URL,
  38. "ip"=>FILTER_VALIDATE_IP
  39. ];
  40. echo '<hr>';
  41. // var_dump(filter_input_array(INPUT_GET,$args));
  42. // filter_input(输入类型get/post,变量名,filter)
  43. $options = ["options"=>["min_range"=>1]];
  44. var_dump(filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT,$options));//bool(false)

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议
灭绝师太2020-11-20 13:38:041楼
在我所讲的课程内容基础上做了总结, 太棒了~是典范级的作业~