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


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

函数的返回值方式
//函数的返回值// 函数必定由返回值,且只支持单值返回;但可以通过以下几种方式进行多数值返回(间接方式实现)//1、通过字符串拼接返回多值function demo1():string{$a=1;$b='你好';return $a.'.<b>'.$b.'</b>';}echo demo1();echo '<hr>';//2、通过数组返回多值function demo2():array{$a=2;$b='你好';return ['a'=>$a,'b'=>$b];}//打印数组,是将数据拆分成2膈字符串echo implode(',',demo2()),'<hr>';echo print_r(demo2(),true),'<hr>';//3、通过jsons格式化字符串返回多值function demo3():string{$a=3;$b='你好';return json_encode(['a'=>$a,'b'=>$b]);}echo demo3(),'<hr>';$jsonStr=demo3();echo '<hr>';//4、将返回值序列化成字符串返回多个值// 序列化是将变量的值转为字符串表示,可以很方便进行存储和传输echo serialize('hello world'),'<br>';//字符串序列化echo serialize([1,2,3,4]),'<br>';//数组序列化function demo4():string{$a=4;$b='你好';// 将返回值序列化成字符串返回多个值return serialize(['a'=>$a,'b'=>$b]);}echo demo4();echo '<hr>';$arr=unserialize((demo4()));print_r($arr['b']);echo '<br>';print_r($arr);

函数的参数
//函数的参数//1、值参数:值传递参数,这是默认的方式function demo1(float $a):float{//在函数中对参数的改变不会映射到外部的参数return $a*2;}$b=100;echo demo1($b),'<br>';echo $b,'<hr>';//2、引用参数:在参数前添加取地址符:&function demo2(float &$a):float{//在函数中对参数的改变会映射到外部的参数return $a=$a+20;}$b=100;echo demo2($b),'<br>';echo $b,'<hr>';//3、默认参数function demo3(float $a,float $b,string $opt='+'):string{switch($opt){//switch 语句用于根据多个不同条件执行不同动作case'+'://sprintf() 函数把格式化的字符串写入一个变量中;sprintf(format,arg1,arg2,arg++)//format必需。规定字符串以及如何格式化其中的变量;%d - 包含正负号的十进制数(负数、0、正数);%s - 字符串//arg1必需。规定插到 format 字符串中第一个 % 符号处的参数;arg2可选。规定插到 format 字符串中第二个 % 符号处的参数;arg++可选。规定插到 format 字符串中第三、四等等 % 符号处的参数return sprintf('%d+%d=%d',$a,$b,($a+$b));break;case'-':return sprintf('%d-%d=%d',$a,$b,($a-$b));break;case'*':return sprintf('%d*%d=%d',$a,$b,($a*$b));break;case'/':if($b!==0)return sprintf('%d/%d=%f',$a,$b,($a/$b));//%f - 浮点数else die('除数不能为0');break;default:die('非法操作符');}}echo demo3(10,20,'+'),'<br>';echo demo3(20,20),'<hr>';//'+'为默认值,可以省略echo demo3(10,20,'-'),'<br>';echo demo3(10,20,'*'),'<br>';echo demo3(10,20,'/'),'<br>';// echo demo3(10,0,'/'),'<br>';// echo demo3(10,2,'!'),'<br>';echo '<hr>';$a='php.cn';$b='123';echo sprintf("%s欢迎%d",$a,$b),'<hr>';//4、剩余参数:...rest,...spread语法function demo4($a,$b){return $a+$b;}echo demo4(1,2),'<br>';function demo5(){// print_r(func_get_args());//func_get_args():获取函数参数列表的数组return array_sum(func_get_args());//对函数进行求和}echo demo5(1,2,3,4,5,6),'<br>';function demo6(...$args){//...args:将传给参数的所有参数全部压到一个数组(args)中return array_sum($args);}echo demo6(1,2,3,4,5,6),'<br>';function demo7(...$args){return array_sum($args);}$data=[1,2,3,4,5,6,7];//...spread在调用参数时,用在具体值的参数列表,也就是实参中echo demo7(...$data),'<br>';echo demo7(...[1,2,3]),'<hr>';//可以将$data替换成具体数组//...name:当用在调用参数中时是展开功能;当用在声明参数中时是归纳功能


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

函数的命名空间
//函数的命名空间namespace ns1;function demo1(){return __FUNCTION__;//__FUNCTION__:返回当前的函数名称字符串;}echo demo1(),'<br>';//在php中不允许在同一个命名空间中声明同名函数,但js可以namespace ns2;function demo1(){return __FUNCTION__;//__FUNCTION__:返回当前的函数名称字符串;}echo demo1(),'<hr>';echo \ns1\demo1();//可以调用另一个空间中的函数

字符串的四种创建方式与应用场景
//字符串长度上限:2G//创建方式:单引号、双引号、heredoc、nowdoc//1、单引号$a='abc';//单引号中的变量不能被解析出来,但可以通过字符串与变量拼接来进行解析然后输出echo 'This is a $a hello word.<br>';echo 'This is a '.$a.' hello word.<br>';//单引号中的特殊字符不能被解析,会原样输出echo 'hello \n\r word.<br>';//\n\r表示回车换行//单引号2层意义:1本义就是字符;2字符串的定界符echo 'hello \'word\'.<br>';//单引号中又出现单引号,必须在单引号前面使用转义符:\//如果又出现转义符:\,应该连续写2个才可以正常输出echo 'hello \'word\\\'.<hr>';//2、双引号//双引号中的变量能被解析出来echo "This is a $a hello word.<br>";//双引号中的变量可以用{}包起来,表示这是一个变量echo "This is a {$a}123 hello word.<br>";echo "This is a ${a}123 hello word.<br>";//可以只用{}将标识符包起来//双引号中的特殊字符能被解析echo "hello \n\r\n\r\n\r word.<br>";//页面中无论写多少回车、换行解析出来只有一个空格//双引号中又出现双引号,必须在双引号前面使用转义符:\echo "hello \"word\".<hr>";//3、heredoc,可以当作双引号的plus+$a='abc';echo "<p>Hello <b style=\"color:red;\">$a</b></p>";//heredoc:可以解析变量,且双引号不需要转义,非常适合php+html写模板时使用echo <<< asd<p>Hello <b style="color:red;">$a</b></p>asd;//heredoc的起始标识符可以不用写双引号;起始标识符和结尾标识符必须一致//4、nowdoc,可以当作单引号的plus+,适合大段的纯文本,不适合内嵌变量或特殊字符的文本echo <<< 'asd'Hello word.<br>Hello word.Hello word.<b>Hello word.</b>asd;//nowdoc的起始标识符必须添加单引号

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号