Blogger Information
Blog 6
fans 0
comment 0
visits 6292
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP基础知识小结1
J
Original
995 people have browsed it

1.变量与常量的区别与创建,访问方式

变量与常量的区别

变量是临时存储数据的容器,是实现数据服用的手段。变量分为全局变量,私有变量,和超全局变量,除超全局变量外,其他变量受作用域限制。变量必须以$作为开始,变量名区分大小写
常量创建必须给定一个值,一旦被定义就无法再更改,通常用大写表示。常量不受作用域限制

变量与常量的创建

变量名必须以$作为开始,不允许使用特殊字符,数字作为变量的开始,必须使用字母或下划线开始,后面允许使用数字
常量的创建分为两种:关键字 const 创建,define() 函数创建,在类中,类的常量只能用 const 创建

  1. //变量
  2. $str = '这是一个变量';
  3. //常量,一旦定义就无法更改
  4. const APP_NAME = 'demo';
  5. define('APP_ID' 110);
  6. class Demo {
  7. const CLASS_NAME = 'Demo';
  8. }
  9. $name = 'APP_NAME';

变量与常量的访问方式

变量和常量都可以使用 echo 直接输出 echo 没有返回值,效率最高,常量的变量化,只能使用constant()函数来获取

  1. //输出变量$a
  2. echo $str;
  3. echo '<br>'; //换行
  4. //访问常量
  5. echo APP_NAME;
  6. echo '<br>';
  7. echo APP_ID;
  8. echo '<br>';
  9. //访问类中的常量
  10. echo Demo::CLASS_NAME;
  11. // 常量名的变量化,只能使用函数来获取
  12. echo constant($name);

代码执行结果如下:

2.变量过滤器的常用函数与用法

变量过滤器的常用函数主要有:

  • filter_list()用来获取过滤器名称
  • filter_id()用来获取过滤器 ID,参数是过滤器名称
  • fliter_var() filter_var_array()分别用来过滤单个和多个变量
  • filter_has_var()用于检测是否存在某个外部变量
  • filter_input() filter_input_array()分别用于过滤单个和多个外部变量
    外部变量类型: INPUT_GETINPUT_POSTINPUT_COOKIEINPUT_SERVERINPUT_ENV
    过滤器主要分为两大类: 验证过滤器清理过滤器
    验证过滤器:主要用于数据类型和格式的验证
    清理过滤器:主要用于去掉非法字符,保留指定字符
  1. //1.返回过滤器的名称
  2. echo '<hr>';
  3. echo '<pre>';
  4. print_r(filter_list());
  5. //2.返回过滤器的ID filter_id(过滤器的名称)
  6. echo '<hr>';
  7. var_dump(filter_id('validate_email'));
  8. echo "<br>";
  9. var_dump(filter_id('int'));
  10. echo '</pre>';
  11. // 3.过滤单个变量 filter_var()
  12. echo '<hr>';
  13. // 在验证范围内的变量
  14. $num1 = 88;
  15. // 在验证范围外的变量
  16. $num2 = 101;
  17. $option = ['options' => ['min_range' => 1,'max_range' => 100]];
  18. var_dump(filter_var($num1 , FILTER_VALIDATE_INT,$option));
  19. echo "<br>";
  20. var_dump(filter_var($num2 , FILTER_VALIDATE_INT,$option));
  21. echo '<hr>';
  22. //4.过滤多个变量
  23. //不符合验证规则变量
  24. $var1 = 100;
  25. $var2 = 'abc';
  26. //符合验证规则变量
  27. $var3 = 666;
  28. $var4 = 888;
  29. //验证不通过将返回false
  30. var_dump(filter_var_array([$var1,$var2],FILTER_VALIDATE_INT));
  31. echo "<br>";
  32. var_dump(filter_var_array([$var3,$var4],FILTER_VALIDATE_INT));
  33. echo "<hr>";
  34. //5.检查是否存在指定变量filter_has_var()
  35. //http://edu.std.com/demo2.php?var1=test
  36. //当前请求只有一个参数
  37. var_dump(filter_has_var(INPUT_GET,'var1')); //返回true
  38. echo "<br>";
  39. var_dump(filter_has_var(INPUT_GET,'var2')); //返回false
  40. // 6.验证过滤外部变量filter_input()
  41. //http://edu.std.com/demo3.php?name=%3Cspan%3Etest%3C/span%3E
  42. //FILTER_SANITIZE_STRING 清理过滤器
  43. var_dump(filter_input(INPUT_GET,'name',FILTER_SANITIZE_STRING));
  44. echo '<hr>';
  45. //7.批量验证过滤外部变量filter_input_array()
  46. $args = [
  47. 'name' => FILTER_SANITIZE_STRING, //清理过滤器,清理字符串中的非法字符
  48. 'age'=> ['filter'=>FILTER_VALIDATE_INT,'options'=>['min_range'=>18,'max_range'=>60]],
  49. 'email'=>FILTER_VALIDATE_EMAIL, //验证过滤器,验证邮箱格式
  50. 'is_married' => FILTER_VALIDATE_BOOLEAN, //验证过滤器,验证布尔值
  51. 'test_url'=> FILTER_VALIDATE_URL //验证过滤器,验证URL格式
  52. ];
  53. echo "<pre>";
  54. //http://edu.std.com/demo3.php?name=%3Cspan%3Edemo%3C/span%3E&age=200&email=1451535153qq.cpm&is_married=%E6%98%AF&test_url=edu.std.com/demo3.php
  55. //非合法数据传值
  56. var_dump(filter_input_array(INPUT_GET,$args));
  57. /*array(5) {
  58. ["name"]=>
  59. string(4) "demo"
  60. ["age"]=>
  61. bool(false)
  62. ["email"]=>
  63. bool(false)
  64. ["is_married"]=>
  65. bool(false)
  66. ["test_url"]=>
  67. bool(false)
  68. }*/
  69. //http://edu.std.com/demo3.php?name=demo&age=20&email=1451535153@qq.cpm&is_married=1&test_url=http://edu.std.com/demo3.php
  70. var_dump(filter_input_array(INPUT_GET,$args));
  71. /*
  72. array(5) {
  73. ["name"]=>
  74. string(4) "demo"
  75. ["age"]=>
  76. int(20)
  77. ["email"]=>
  78. string(17) "1451535153@qq.cpm"
  79. ["is_married"]=>
  80. bool(true)
  81. ["test_url"]=>
  82. string(28) "http://edu.std.com/demo3.php"
  83. }
  84. */

代码执行结果:

3.函数的类型

  • 内置函数:系统给用户提前写好的,可以开箱即用,不需要也不允许再申明
  • 自定义函数:用户根据项目需求自己写的
  • 可变函数:将函数名称放在一个变量中进行引用
  • 匿名函数:没有函数名称,匿名函数也被叫做闭包
  1. //1.系统函数/内置函数
  2. var_dump(111); //用于打印数据,并输出数据类型
  3. echo '<hr>';
  4. //2.自定义函数
  5. function getStr(float $money , float $discount){
  6. $pay = $money * $discount;
  7. $str = '原价:' .$money .' 元,实际支付 '.$pay . ' 元<br>';
  8. return $str;
  9. }
  10. echo getStr(1000 , 0.8);
  11. echo '<hr>';
  12. // 3.可变函数:将函数名称放在一个变量中进行引用
  13. $funcName = 'getStr';
  14. echo $funcName(5000 , 0.6);
  15. echo '<hr>';
  16. // 4. 匿名函数
  17. $getStr = function (float $money , float $discount){
  18. $pay = $money * $discount;
  19. $str = '原价:' .$money .' 元,实际支付 '.$pay . ' 元<br>';
  20. return $str;
  21. }; //匿名函数不是代码块需要加分号结束
  22. echo $getStr(4000,0.8);
  23. echo '<hr>';
  24. // 闭包函数,可以访问上一级空间的成员
  25. $discount = 0.6;
  26. // 访问上一层空间的$discount
  27. $str = function (float $money) use ($discount){
  28. $pay = $money * $discount;
  29. return '原价:' .$money .' 元,实际支付 '.$pay . ' 元<br>';
  30. };
  31. echo $str(10000);
  32. echo '<hr>';
  33. $srting = function ($discount) {
  34. // 使用上一层的$discount
  35. // 子函数全局不可见,只有父函数可见
  36. return function (float $money , int $num) use ($discount){
  37. $p = $money * $num;
  38. $pay = $p * $discount;
  39. return '原价:' .$p .' 元,实际支付 '.$pay . ' 元<br>';
  40. };
  41. };
  42. $pay = $srting(0.8);
  43. echo $pay(500 , 8); //通过父函数访问子函数
  44. echo $srting(0.8)(500,8);

代码执行结果如下:

4.函数的返回值方式

函数必定有返回值,函数只支持单值返回,可以以下方式实现多值返回:

  • 通过字符串拼接返回多值
  • 通过数组返回
  • 通过 json 字符串返回
  • 通过将返回值序列化成字符串返回多值
  1. // 1.通过自负窜拼接返回多值
  2. function res1(){
  3. $status = 0;
  4. $msg = 'success';
  5. return $status . ' => ' . $msg .'<br>';
  6. }
  7. echo res1();
  8. echo '<hr>';
  9. // 2.通过数组的方式返回多值
  10. function res2(){
  11. $status = 0;
  12. $msg = 'success';
  13. $arr = ['status'=> $status,'msg' => $msg];
  14. $str = implode(" => " , $arr);
  15. return $str;
  16. }
  17. echo res2();
  18. echo '<hr>';
  19. // 3.通过json格式化字符串返回多值
  20. function res3(){
  21. $status = 0;
  22. $msg = 'success';
  23. $arr = ['status'=> $status,'msg' => $msg];
  24. return json_encode($arr);
  25. }
  26. echo res3();
  27. echo '<hr>';
  28. // 4.通过将返回值序列化返回多值
  29. function res4(){
  30. $status = 0;
  31. $msg = 'success';
  32. $arr = ['status'=> $status,'msg' => $msg];
  33. return serialize($arr);
  34. }
  35. echo res4();

代码执行结果如下:

5.函数的参数

函数的参数主要分为 4 种:值传递参数引用参数默认参数剩余参数

  1. //函数的参数
  2. // 1.值参数:值传递参数(默认方式)
  3. function demo1(int $argc){
  4. // 函数中对参数的操作不影响外部参数的值
  5. return $argc += 10000;
  6. }
  7. echo demo1(100),'<br>';
  8. echo '<hr>';
  9. // 2.应用参数,在参数前添加地址符 : &
  10. function demo2(int &$argc){
  11. // 函数中对参数的操作会改变外部参数的值
  12. return $argc += 10000;
  13. }
  14. $var = 100;
  15. echo demo2($var),'<br>';
  16. echo $var,'<br>'; //10100
  17. echo '<hr>';
  18. // 3.默认参数
  19. function demo3(int $argc, int $num = 1000){
  20. return $argc += $num;
  21. }
  22. $var = 100;
  23. echo demo3($var),'<br>'; //第二个参数不传值,默认使用默认参数1000
  24. echo demo3($var, 3000);
  25. echo '<hr>';
  26. //4.剩余参数 ...rest /...spread
  27. //...$args 将传入的参数全部放入到一个素组$args中
  28. function demo4(...$args){
  29. // 计算数组值的和
  30. return array_sum($args);
  31. }
  32. // 传入值是多个参数
  33. echo demo4(2,3,4,5,6),'<br>';
  34. function demo5(...$args){
  35. return array_sum($args);
  36. }
  37. $data = [2,3,4,5,6];
  38. // ...spread 将数组参数打散
  39. echo demo5(...$data);

代码执行结果如下:

6.函数的回调执行方式

回调函数是异步执行的重要工具,用call_user_func()call_user_func_array() 来回调函数

  1. // 回调函数
  2. function demo1(...$args){
  3. return array_sum($args);
  4. }
  5. function demo2(){
  6. sleep(5);
  7. return '5s later <br>';
  8. }
  9. // 以回调的方式来执行一个函数
  10. echo call_user_func('demo1',2,3,4,5,6);
  11. echo '<br>';
  12. echo call_user_func_array('demo1',[2,3,4,5,6]);
  13. echo '<br>';
  14. echo call_user_func('demo2'); //demo2 执行长时间过程,不影响后续代码的执行
  15. echo 'sleep 5';
  16. echo '<hr>';
  17. $data = range(1,50);
  18. // 将数组的值 *2 处理
  19. $arr = array_map(function ($item) {
  20. return $item *=2;
  21. },$data);
  22. print_r($arr);

代码执行结果如下:

7.函数的命名空间

php 中不允许在同一个命名空间中声明同名函数

  1. //命名空间
  2. namespace ns1;
  3. function demo1(){
  4. return '命名空间 ' . __NAMESPACE__ .' 的方法 ' . __FUNCTION__;
  5. }
  6. echo demo1();
  7. echo '<hr>';
  8. namespace ns2;
  9. function demo1(){
  10. return '命名空间 ' . __NAMESPACE__ .' 的方法 ' . __FUNCTION__;
  11. }
  12. echo demo1();
  13. echo '<br>';
  14. // 在ns2中调用ns1中的demo1()
  15. echo \ns1\demo1();

代码执行结果如下:

8.字符串的四种创建方式与应用场景数

字符串创建的方式有四种:单引号双引号heredocnowdoc;
单引号:单引号中的特殊字符,变量不能被解析,变量只能通过与字符串组合后输出,如果单引号中又出现单引号,必须使用转义符进行转义

双引号: 可以解析特殊字符和变量,多个空格或者回车在页面中被视为 1 个,如果双引号中出现双引号,必须使用转义符进行转义

heredoc: 双引号的升级本,可以解析变量,且双引号不需要被转义,使用于写 php+html 模版

nowdoc: 单引号的升级版,适合大段的存文本,不适合内嵌变量和特殊字符的文本

  1. // 1.单引号 ''
  2. $str = 'string';
  3. // 单引号中变量不能被解析
  4. echo 'This is a $str demo. <br>';
  5. // 通过和变量拼接来解析变量
  6. echo 'This is a ' . $str . ' demo. <br>';
  7. //特殊字符 \r\n原样输出,不能被解析
  8. echo 'This is \r\n a demo. <br>';
  9. // 单引号中出现单引号,必须使用 \ 转义
  10. echo 'This is a \'sting\' demo. <br>';
  11. //输出一个\
  12. echo 'This is a \\ demo';
  13. echo '<hr>';
  14. // 2.双引号 ""
  15. // 双引号中变量被解析
  16. echo "This is a {$str} demo. <br>";
  17. // 双引号的特殊字符能被解析
  18. echo "This is a \r\n demo. <br>";
  19. // 双引号中出现双引号,必须使用 \ 转义
  20. echo "This is a \"string\" demo. <br>";
  21. echo '<hr>';
  22. // 3.heredoc
  23. $username = 'username';
  24. //可以解析变量,且双引号不需要转义,适用于写html模版
  25. echo <<< EOF
  26. <fieldset>
  27. <legend>用户登录</legend>
  28. <form action="" method="post">
  29. <div>
  30. <label for="user-name">用户名:</label>
  31. <input id="user-name" type="text" name="username" value="{$username}" placeholder="不少于10个字符" required autofocus />
  32. </div>
  33. <div>
  34. <label for="pwd">密码:</label>
  35. <input id="pwd" type="password" name="password" value="" placeholder="不少于8位" require />
  36. </div>
  37. <div>
  38. <button>登录</button>
  39. </div>
  40. </form>
  41. </fieldset>
  42. EOF;
  43. echo '<br>';
  44. // 4.nowdoc
  45. // nowdoc 的起始标签必须加单引号
  46. echo <<< 'EOF'
  47. This is a long {$str} <br>This is a \r\n <br>This is a long string <br>
  48. This is a long string <br>
  49. EOF;
  50. // nowdoc不解析变量,适合写大段文本

代码执行结果如下:

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
0 comments
Author's latest blog post