Blogger Information
Blog 15
fans 0
comment 0
visits 11200
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
变量、常量、函数、字符串
乐作人生
Original
785 people have browsed it
  1. 变量与常量的区别与创建,访问方式
  • 变量

    • 变量是临时存储数据的容器;是实现数据复用的手段;
    • 变量名区分大小写;函数不区分大小写。如$username和$userName
    • 变量名必须使用$符号开始;不允许使用数字开始;必须使用字母或下划线开始,后面允许使用数字。
    • 访问方式:可用echo输出,没有返回值,效率最高;如:$a=’abs’; echo $a;
  • 常量

    • 常量是在当前脚本中不允许更改的变量(也叫只读变量),不受作用域访问限制;
    • 常量创建的时候必须初始化,且常量名尽量使用大写字母;
    • 常量创建分为关键字const和函数define();
      • 关键字创建,如: const USER_NAME=’猪猪’;
      • define()函数创建, define(常量名称,对应的常量值):对应的常量值可以为数组、integer(整数)、float(浮点)、string(字符串)、boolean(布尔)类型的值;如:define(‘AGE’,20);
      • 类中的常量只能用const,如:class user{
        const CITY =’CHINA’; }
    • 访问方式:可用echo输出,没有返回值,效率最高;如:echo CITY;但当常量名变量化后,只能用函数来获取。如:$b=’CITY’; echo constant($b);
  1. 变量过滤器的常用函数与用法

    1. // 1)过滤单个变量:filter_var():通过指定的过滤器过滤一个变量
    2. $age=30;
    3. var_dump(filter_var($age,FILTER_VALIDATE_INT));//FILTER_VALIDATE_INT:把值作为整数来验证。
    4. echo '<br>';
    5. $age=70;
    6. $options=['options'=>['min_range'=>18,'max_range'=>60]];
    7. var_dump(filter_var($age,FILTER_VALIDATE_INT,$options));//检测数值是否在$options范围内
    8. echo '<hr>';
    9. $email='admin.qq.com';
    10. $a='admin@qq.com';
    11. var_dump(filter_var($email,FILTER_VALIDATE_EMAIL));//FILTER_VALIDATE_EMAIL:检测变量是否符合 e-mail 地址的要求
    12. echo '<br>';
    13. var_dump(filter_var($a,FILTER_VALIDATE_EMAIL));
    1. // 2)过滤多个变量:filter_var_array()
    2. $a=10;
    3. $b='abc';
    4. $c='33';
    5. var_dump(filter_var_array([$a,$b],FILTER_VALIDATE_INT));
    6. echo '<br>';
    7. var_dump(filter_var_array([$a,$c],FILTER_VALIDATE_INT));
    8. echo '<br>';
    9. var_dump(filter_var_array([$a,$b,$c],FILTER_VALIDATE_INT));
    10. echo '<hr>';
    1. //3)验证外部变量(不在当前脚本中创建的变量,如GET、POST发送过来的变量);filter_input():验证单个外部变量
    2. //?id=30:查询字符串
    3. echo 'id=' .$_GET['id'];
    4. //filter_input(输入类型get/post,字符串表示的变量名,过滤器,选项参数)
    5. $options=['options'=>['min_range'=>1]];
    6. var_dump(filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT,$options));
    7. echo '<hr>';
    8. //同时验证多个外部变量:filter_input_array()
    9. $args=[
    10. 'name'=>FILTER_SANITIZE_STRING,//FILTER_SANITIZE_STRING:去除标签,去除或编码特殊字符
    11. 'email'=>FILTER_VALIDATE_EMAIL,//FILTER_VALIDATE_EMAIL: 把值作为 e-mail 地址来验证
    12. 'age'=>['filter'=>FILTER_VALIDATE_INT,'options'=>['min_range'=>18,'max_range'=>60]],//FILTER_VALIDATE_INT: 把值作为整数来验证
    13. 'blog'=>FILTER_VALIDATE_URL,//FILTER_VALIDATE_URL: 把值作为 URL 来验证
    14. ];
    15. var_dump(filter_input_array(INPUT_GET,$args));


  2. 函数的类型
    函数类型分为自定义函数、系统函数、可变函数、匿名函数

    1. //1、函数类型:自定义函数、系统函数、可变函数、匿名函数
    2. // 1)自定义函数
    3. // 计算折扣价
    4. function getPrice(float $money,float $discount):float
    5. {
    6. return $money *$discount;
    7. }
    8. echo '实付金额:',getPrice(5600,0.7),'元<hr>';
    1. // 2)系统函数/内置函数:由系统事先声明,用户只需调用即可
    2. $a='中医养生,就是指通过各种方法颐养生命、增强体质、预防疾病,从而达到延年益寿的一种医事活动。所谓生,就是生命、生存、生长之意;所谓养,即保养、调养、补养之意。';
    3. //mb_substr($str,$start,$length):$str必需,表示从该处提取字符串;
    4. // $start必需,表示在字符串的何处开始提取,0表示从第一个字符串开始,正数表示在字符串的指定位置开始,负数表示从字符串结尾的指定位置开始;
    5. // $length可选,表示规定提取的字符串的长度,默认时字符串的结尾
    6. echo mb_substr($a,0,10),'<br>';
    7. echo mb_substr($a,10,10),'<br>';
    8. echo mb_substr($a,-10,10),'<hr>';
    1. // 3)可变函数:将函数的名称放在一个变量中进行调用
    2. $a='getPrice';
    3. echo '实付金额:'.$a(900,0.2).'元<hr>';
    1. // 4)匿名函数:没有名称
    2. // 没有名称的叫函数表达式,可将其赋给一个变量,叫赋值语句,后面需要加分号;
    3. $b=function (float $money,float $discount):float
    4. {
    5. return $money *$discount;
    6. };
    7. echo '实付金额:'.$b(900,0.4).'元<hr>';
    8. //匿名函数在PHP中也叫闭包,闭包也是一个函数,可以访问上一级空间的成员
    9. //将折扣率变量声明到它的全局空间,也就是它的父作用域中
    10. $p=0.6;
    11. $b=function (float $money) use($p):float{
    12. return $money*$p;
    13. };
    14. echo '实付金额:'.$b(900).'元<hr>';
    15. //闭包是匿名函数最常用的应用场景之一;闭包是一个子函数,全局不可见,但是它的父函数可见
    16. //闭包全局无法调用,可以当成父函数的返回值返回到全局,它可以将函数中的一些内容带给全局使用
    17. //因为函数一旦调用完成,内部全部释放掉,外部不再能访问,外部不能访问函数中的私有成员
    18. //函数中的私有成员,可以通过它的子函数(闭包)返回到全局供它使用
    19. $a=function ($b){
    20. $c=function (float $money,int $n) use($b){
    21. $local=$money*$n;
    22. return ($local>2000) ? ($local*$b):$local;
    23. };
    24. return $c;
    25. };
    26. echo '实付金额:'.$a(0.5)(900,10).'元<hr>';

  3. 函数的返回值方式

    1. //函数的返回值
    2. // 函数必定由返回值,且只支持单值返回;但可以通过以下几种方式进行多数值返回(间接方式实现)
    3. //1、通过字符串拼接返回多值
    4. function demo1():string{
    5. $a=1;
    6. $b='你好';
    7. return $a.'.<b>'.$b.'</b>';
    8. }
    9. echo demo1();
    10. echo '<hr>';
    11. //2、通过数组返回多值
    12. function demo2():array{
    13. $a=2;
    14. $b='你好';
    15. return ['a'=>$a,'b'=>$b];
    16. }
    17. //打印数组,是将数据拆分成2膈字符串
    18. echo implode(',',demo2()),'<hr>';
    19. echo print_r(demo2(),true),'<hr>';
    20. //3、通过jsons格式化字符串返回多值
    21. function demo3():string{
    22. $a=3;
    23. $b='你好';
    24. return json_encode(['a'=>$a,'b'=>$b]);
    25. }
    26. echo demo3(),'<hr>';
    27. $jsonStr=demo3();
    28. echo '<hr>';
    29. //4、将返回值序列化成字符串返回多个值
    30. // 序列化是将变量的值转为字符串表示,可以很方便进行存储和传输
    31. echo serialize('hello world'),'<br>';//字符串序列化
    32. echo serialize([1,2,3,4]),'<br>';//数组序列化
    33. function demo4():string{
    34. $a=4;
    35. $b='你好';
    36. // 将返回值序列化成字符串返回多个值
    37. return serialize(['a'=>$a,'b'=>$b]);
    38. }
    39. echo demo4();
    40. echo '<hr>';
    41. $arr=unserialize((demo4()));
    42. print_r($arr['b']);
    43. echo '<br>';
    44. print_r($arr);

  4. 函数的参数

    1. //函数的参数
    2. //1、值参数:值传递参数,这是默认的方式
    3. function demo1(float $a):float{
    4. //在函数中对参数的改变不会映射到外部的参数
    5. return $a*2;
    6. }
    7. $b=100;
    8. echo demo1($b),'<br>';
    9. echo $b,'<hr>';
    10. //2、引用参数:在参数前添加取地址符:&
    11. function demo2(float &$a):float{
    12. //在函数中对参数的改变会映射到外部的参数
    13. return $a=$a+20;
    14. }
    15. $b=100;
    16. echo demo2($b),'<br>';
    17. echo $b,'<hr>';
    18. //3、默认参数
    19. function demo3(float $a,float $b,string $opt='+'):string{
    20. switch($opt){//switch 语句用于根据多个不同条件执行不同动作
    21. case'+':
    22. //sprintf() 函数把格式化的字符串写入一个变量中;sprintf(format,arg1,arg2,arg++)
    23. //format必需。规定字符串以及如何格式化其中的变量;%d - 包含正负号的十进制数(负数、0、正数);%s - 字符串
    24. //arg1必需。规定插到 format 字符串中第一个 % 符号处的参数;arg2可选。规定插到 format 字符串中第二个 % 符号处的参数;arg++可选。规定插到 format 字符串中第三、四等等 % 符号处的参数
    25. return sprintf('%d+%d=%d',$a,$b,($a+$b));
    26. break;
    27. case'-':
    28. return sprintf('%d-%d=%d',$a,$b,($a-$b));
    29. break;
    30. case'*':
    31. return sprintf('%d*%d=%d',$a,$b,($a*$b));
    32. break;
    33. case'/':
    34. if($b!==0)
    35. return sprintf('%d/%d=%f',$a,$b,($a/$b));//%f - 浮点数
    36. else die('除数不能为0');
    37. break;
    38. default:
    39. die('非法操作符');
    40. }
    41. }
    42. echo demo3(10,20,'+'),'<br>';
    43. echo demo3(20,20),'<hr>';//'+'为默认值,可以省略
    44. echo demo3(10,20,'-'),'<br>';
    45. echo demo3(10,20,'*'),'<br>';
    46. echo demo3(10,20,'/'),'<br>';
    47. // echo demo3(10,0,'/'),'<br>';
    48. // echo demo3(10,2,'!'),'<br>';
    49. echo '<hr>';
    50. $a='php.cn';
    51. $b='123';
    52. echo sprintf("%s欢迎%d",$a,$b),'<hr>';
    53. //4、剩余参数:...rest,...spread语法
    54. function demo4($a,$b){
    55. return $a+$b;
    56. }
    57. echo demo4(1,2),'<br>';
    58. function demo5(){
    59. // print_r(func_get_args());//func_get_args():获取函数参数列表的数组
    60. return array_sum(func_get_args());//对函数进行求和
    61. }
    62. echo demo5(1,2,3,4,5,6),'<br>';
    63. function demo6(...$args){
    64. //...args:将传给参数的所有参数全部压到一个数组(args)中
    65. return array_sum($args);
    66. }
    67. echo demo6(1,2,3,4,5,6),'<br>';
    68. function demo7(...$args){
    69. return array_sum($args);
    70. }
    71. $data=[1,2,3,4,5,6,7];
    72. //...spread在调用参数时,用在具体值的参数列表,也就是实参中
    73. echo demo7(...$data),'<br>';
    74. echo demo7(...[1,2,3]),'<hr>';//可以将$data替换成具体数组
    75. //...name:当用在调用参数中时是展开功能;当用在声明参数中时是归纳功能


  5. 函数的回调执行方式

    1. //函数回调
    2. function demo1($a,$b){
    3. return $a+$b;
    4. }//直接调用(同步调用):这条调用语句不执行完成,后面的语句不会被执行
    5. echo demo1(1,2),'<br>';
    6. //当一个函数在执行过程中存在不可预测性时,不宜同步调用,应用回调方式来执行
    7. //call_user_func():把第一个参数作为回调函数调用;第一个参数是被调用的回调函数,其余参数是回调函数的参数
    8. echo call_user_func('demo1',1,2),'<br>';
    9. echo call_user_func_array('demo1',[1,2]),'<hr>';//call_user_func_array:数组式传参
    10. //当demo1()函数在执行时非常耗时,此时需要用回调方式执行,这样后面的语句不必等待demo1()执行完成才执行
    11. //回调函数是异步执行的重要工具
    12. $a=range(1,10);//range() 函数创建一个包含指定范围的元素的数组
    13. //range(low,high,step):low必需。规定数组元素的最小值;high必需。规定数组元素的最大值;step可选。规定元素之间的步进制,默认是 1;
    14. $b=range(1,10,2);
    15. print_r($b);
    16. echo '<hr>';
    17. $arr=array_map(function($item){
    18. if($item%2===0)return $item;//%:取模(除法的余数);该句表示能被2整除,也就是取偶数
    19. },$a);
    20. print_r($arr);//打印出来的存在键对应空值
    21. echo '<hr>';
    22. //array_filter() 函数用回调函数过滤数组中的元素
    23. //$arr表示要过滤的数组,必需;function(){}表示要用的回调函数,可选;
    24. $d=array_filter($arr,function($item){
    25. return $item;
    26. });
    27. //可简写成$d=array_filter($arr);
    28. print_r($d);

  6. 函数的命名空间

    1. //函数的命名空间
    2. namespace ns1;
    3. function demo1(){
    4. return __FUNCTION__;//__FUNCTION__:返回当前的函数名称字符串;
    5. }
    6. echo demo1(),'<br>';
    7. //在php中不允许在同一个命名空间中声明同名函数,但js可以
    8. namespace ns2;
    9. function demo1(){
    10. return __FUNCTION__;//__FUNCTION__:返回当前的函数名称字符串;
    11. }
    12. echo demo1(),'<hr>';
    13. echo \ns1\demo1();//可以调用另一个空间中的函数

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

    1. //字符串长度上限:2G
    2. //创建方式:单引号、双引号、heredoc、nowdoc
    3. //1、单引号
    4. $a='abc';
    5. //单引号中的变量不能被解析出来,但可以通过字符串与变量拼接来进行解析然后输出
    6. echo 'This is a $a hello word.<br>';
    7. echo 'This is a '.$a.' hello word.<br>';
    8. //单引号中的特殊字符不能被解析,会原样输出
    9. echo 'hello \n\r word.<br>';//\n\r表示回车换行
    10. //单引号2层意义:1本义就是字符;2字符串的定界符
    11. echo 'hello \'word\'.<br>';//单引号中又出现单引号,必须在单引号前面使用转义符:\
    12. //如果又出现转义符:\,应该连续写2个才可以正常输出
    13. echo 'hello \'word\\\'.<hr>';
    14. //2、双引号
    15. //双引号中的变量能被解析出来
    16. echo "This is a $a hello word.<br>";
    17. //双引号中的变量可以用{}包起来,表示这是一个变量
    18. echo "This is a {$a}123 hello word.<br>";
    19. echo "This is a ${a}123 hello word.<br>";//可以只用{}将标识符包起来
    20. //双引号中的特殊字符能被解析
    21. echo "hello \n\r\n\r\n\r word.<br>";//页面中无论写多少回车、换行解析出来只有一个空格
    22. //双引号中又出现双引号,必须在双引号前面使用转义符:\
    23. echo "hello \"word\".<hr>";
    24. //3、heredoc,可以当作双引号的plus+
    25. $a='abc';
    26. echo "<p>Hello <b style=\"color:red;\">$a</b></p>";
    27. //heredoc:可以解析变量,且双引号不需要转义,非常适合php+html写模板时使用
    28. echo <<< asd
    29. <p>Hello <b style="color:red;">$a</b></p>
    30. asd;
    31. //heredoc的起始标识符可以不用写双引号;起始标识符和结尾标识符必须一致
    32. //4、nowdoc,可以当作单引号的plus+,适合大段的纯文本,不适合内嵌变量或特殊字符的文本
    33. echo <<< 'asd'
    34. Hello word.<br>Hello word.Hello word.<b>Hello word.</b>
    35. asd;
    36. //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