博客列表 >PHP关于变量、过滤器以及常量的基础知识和自己的理解

PHP关于变量、过滤器以及常量的基础知识和自己的理解

程东旭
程东旭原创
2020年04月17日 13:39:40585浏览

4月16日作业:

1. 将课堂案例全部过一遍,并将自己认为重要的发布到博客中

代码部分

  1. <?php
  2. //创建一个变量,默认就是全局作用域
  3. $name1 = 'mafei';
  4. //如果要在函数中引用此变量,使用global引用,例如
  5. function aaa() : string
  6. {
  7. global $name1;
  8. return $name1;
  9. }
  10. echo aaa() , '<br>';
  11. //在函数中引用全局变量,也可以使用超全局变量GLOBALS实现,例如
  12. function bbb() : string
  13. {
  14. $name2 = $GLOBALS['name1'];
  15. return $name2;
  16. }
  17. echo bbb();
  18. echo '<hr>';
  19. //函数中创建的变量成为私有变量,在函数中的每次使用都会被格式化
  20. function ccc() : int
  21. {
  22. $age = 20;
  23. $age = $age + 2;
  24. return $age;
  25. }
  26. echo ccc() , '<br>';
  27. echo ccc() , '<br>';
  28. echo ccc() , '<br>';
  29. //函数中引用全局变量,不会每次都被格式化
  30. $age = 30;
  31. function ddd() : int
  32. {
  33. global $age;
  34. $age = $age + 3;
  35. return $age;
  36. }
  37. echo ddd() , '<br>';
  38. echo ddd() , '<br>';
  39. echo ddd() , '<br>';
  40. //如果在函数中创建的私有变量,也不要每次都格式化,需要创建静态变量即可
  41. function eee() : int
  42. {
  43. static $age = 40;
  44. $age = $age + 1;
  45. return $age;
  46. }
  47. echo eee() , '<br>';
  48. echo eee() , '<br>';
  49. echo eee() , '<br>';
  50. echo '<hr>';
  51. //查看所有过滤器以及过滤器的id
  52. //foreach (filter_list() as $filter){
  53. // echo $filter. '=>' . filter_id($filter) . '<br>';
  54. //}
  55. //1.过滤单个变量用filter_var()
  56. $age = 20;
  57. //整数过滤器
  58. var_dump(filter_var($age, FILTER_VALIDATE_INT, ['options'=>['min_range'=>10,'max_range'=>30]]));
  59. echo '<hr>';
  60. //邮箱过滤器
  61. $email = 'aaa';
  62. $email = 'aaa@php.cn';
  63. var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
  64. echo '<hr>';
  65. //过滤单个变量filter_var_array(),应该成为数组过滤器
  66. var_dump(filter_var_array([100, 'aaa@php.cn'], FILTER_VALIDATE_EMAIL));
  67. echo '<hr>';
  68. //检测外部变量里面的get请求里面是否存在键值对
  69. var_dump(filter_has_var(INPUT_GET, 'aaa'));
  70. echo '<hr>';
  71. echo 'get变量p = ' . $_GET['n'];
  72. echo '<hr>';
  73. //验证单个外部数据
  74. var_dump(filter_input(INPUT_GET, 'n', FILTER_VALIDATE_INT, ['options'=>['min_range'=>30, 'max_range'=>3000]]));
  75. echo '<hr>';
  76. //同时验证多个外部数据
  77. //先建立一个数据过滤器
  78. $args = [
  79. 'username' => FILTER_SANITIZE_STRING,
  80. 'email' => FILTER_VALIDATE_EMAIL,
  81. 'age' => ['filter' => FILTER_VALIDATE_INT, 'flags'=>FILTER_REQUIRE_SCALAR, 'options' => ['min_range' => 18, 'max_range'=>60]],
  82. ];
  83. //验证多个外部数据
  84. var_dump(filter_input_array(INPUT_GET, $args));
  85. echo '<hr>';
  86. //用函数define定义常量
  87. define('NAME', 'aaa');
  88. echo NAME , '<br>';
  89. //用const定义常量
  90. const NAME2 = 'bbb';
  91. echo NAME2 . '<br>';
  92. //用constant打印常量
  93. echo constant('NAME') . '<br>';
  94. //将常量的名称保存在变量里面
  95. $a = 'NAME';
  96. echo constant($a) . '<br>';
  97. //建立一个名称为空的常量
  98. define('', 'mafei');
  99. //constant可以打印名称为空的常量
  100. echo constant('');
  101. echo '<hr>';
  102. //魔术常量
  103. echo '当前行号' . __LINE__ . '<br>';
  104. echo '当前文件' . __FILE__ . '<br>';
  105. echo '当前目录' . __DIR__ . '<br>';
  106. echo '<hr>';
  107. //在函数中使用魔术常量
  108. function aaa111()
  109. {
  110. echo __FUNCTION__;
  111. }
  112. aaa111();
  113. //在类中使用魔术常量
  114. class ccc
  115. {
  116. public function index()
  117. {
  118. echo __METHOD__;
  119. }
  120. }
  121. (new ccc)->index();

总结

一、关于作用域

1、在函数外部创建的变量是全局变量,默认无法被函数内引用,如果需要在函数中引用,需要使用global引用,或者使用超全局变量$GLOBALS

2、默认在函数内创建的私有变量引用时每次都格式化,函数引用全局变量不会每次都格式化

3、在函数内部创建的私有变量,如果不想让每次都格式化,需要使用static创建静态变量

二、过滤器

1、所有过滤器

int=>257
boolean=>258
float=>259
validate_regexp=>272
validate_domain=>277
validate_url=>273
validate_email=>274
validate_ip=>275
validate_mac=>276
string=>513
stripped=>513
encoded=>514
special_chars=>515
full_special_chars=>522
unsafe_raw=>516
email=>517
url=>518
number_int=>519
number_float=>520
magic_quotes=>521
add_slashes=>523
callback=>1024

2、单个变量过滤器用FILTER_VAR,数组过滤器用FILTER_VAR_ARRAY

3、邮箱过滤器用FILTER_VALIDATE_EMAIL

4、检测外部变量过滤器用FILTER_HAS_VAR

5、验证单个外部数据用FILTER_INPUT,验证多个外部数据用FILTER_INPUT_ARRAY

三、常量

1、关于define和const定义常量的区别

使用场景。 define const
函数 可用 不可用
流程控制 可用 不可用
不可用 可用

2、常量只允许用标量进行初始化,标量包括单值变量、字符串、数值、布尔值、null,php7.0+支持数组初始化常量

3、当不知道常量名的时候可以用函数constant()打印常量

4、魔术常量的值会随当天获取信息的不同而发生变化

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议