Blogger Information
Blog 28
fans 0
comment 0
visits 30056
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP变量常量及过滤器细说
G
Original
982 people have browsed it

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)

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!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
1 comments
灭绝师太 2020-11-20 13:38:04
在我所讲的课程内容基础上做了总结, 太棒了~是典范级的作业~
1 floor
Author's latest blog post