博客列表 >PHP 变量过滤器、函数

PHP 变量过滤器、函数

金牌马甲
金牌马甲原创
2020年09月03日 18:45:36874浏览

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

1.过滤单个变量:

  1. filter_var();
代码展示:
  1. <?php
  2. $age = 30;
  3. $options = ['options'=>['min_range'=>18,'max_range'=>60]];
  4. var_dump(filter_var($age,FILTER_VALIDATE_INT,$options));
  5. echo '<br>';
  6. $email = '123@php';
  7. var_dump(filter_var($email,FILTER_VALIDATE_EMAIL));
  8. ?>
运行结果:
  1. int(30)
  2. bool(false)

2.过滤多个变量:

  1. filter_var_array();
代码展示:
  1. <?php
  2. $a = 'ABC';
  3. $b = '123';
  4. $c = true;
  5. $d = 123;
  6. var_dump(filter_var_array([$a,$b,$c,$d],FILTER_VALIDATE_BOOLEAN));
  7. ?>
运行结果:
  1. array(4) {
  2. [0]=>
  3. bool(false)
  4. [1]=>
  5. bool(false)
  6. [2]=>
  7. bool(true)
  8. [3]=>
  9. bool(false)
  10. }

3.过滤外部变量

  1. filter_input();
代码展示:
  1. <?php
  2. echo 'id= ' . $_GET['id'];
  3. echo '<br>';
  4. $options = ['options'=>['min_range'=>1]];
  5. var_dump(filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT,$options));
  6. ?>
运行结果:
  1. id= 998
  2. int(998)

4.验证多个外部变量

  1. filter_input_array();
代码展示:
  1. <?php
  2. $args = [
  3. 'id'=>FILTER_VALIDATE_INT,
  4. 'username'=>FILTER_SANITIZE_STRING,
  5. 'email'=>FILTER_VALIDATE_EMAIL,
  6. 'blog'=>FILTER_VALIDATE_URL,
  7. ];
  8. var_dump(filter_input_array(INPUT_GET,$args));
  9. ?>
运行结果:
  1. array(4) {
  2. ["id"]=>
  3. int(998)
  4. ["username"]=>
  5. string(2) "GW"
  6. ["email"]=>
  7. bool(false)
  8. ["blog"]=>
  9. bool(false)
  10. }

函数

1.函数类型

1.1系统函数/内置函数(直接调用):
  1. mb_substr();
代码展示:
  1. <?php
  2. $str = '本文实例为大家分享了几个常用的php短信接口代码';
  3. mb_substr($str,2,7);
  4. echo mb_substr($str,2,7);
  5. ?>
运行结果:
  1. 实例为大家分享
1.2自定义函数:
代码展示:
  1. <?php
  2. function getPrice(float $price, float $discount) : float {
  3. return $price * $discount;
  4. };
  5. echo '折后价格:'. getPrice(100, 0.8). '元';
  6. ?>
运行结果:
  1. 折后价格:80
1.3可变函数(将函数名称放在一个变量中进行引用):
代码展示:
  1. <?php
  2. function getPrice(float $money, float $discount) : float{
  3. return $money * $discount;
  4. }
  5. $funcname = 'getPrice';
  6. echo '折后价格:'. $funcname(110, 0.8). '元';
  7. ?>
运行结果:
  1. 折后价格:88
1.4匿名函数:
代码展示:
  1. <?php
  2. $getPrice = function(float $money, float $discount) : float{
  3. return $money * $discount;
  4. };
  5. echo '折后价格:'. $getPrice(100, 0.8). '元';
  6. ?>
运行结果:
  1. 折后价格:80
1.4.1匿名函数在PHP中又称为“闭包”,可以访问上一级空间的成员:
代码展示:
  1. <?php
  2. $discount = 0.8;
  3. $getPrice = function(float $money) use($discount) : float{
  4. return $money * $discount;
  5. };
  6. echo '折后价格:'. $getPrice(100). '元';
  7. ?>
运行结果:
  1. 折后价格:80
1.4.2“闭包”更多用于子函数:
代码展示:
  1. <?php
  2. $f = function($discount){
  3. $p = function(float $money, int $n) use($discount) : float{
  4. $total = $money * $n;
  5. return($total > 200) ? ($total * $discount) : $total;
  6. };
  7. return $p;
  8. };
  9. $p = $f(0.8);
  10. echo '折后价格:'. $p(100, 3). '元';
  11. ?>
运行结果:
  1. 折后价格:240
关于“闭包”
闭包是匿名函数最常用的应用场景之一
闭包是一个子函数,全局不可见,但父函数可见
闭包全局无法调用,可以当成父函数的返回值,返回到全局,可以将函数中的内容带给全局使用
函数一旦调用完成,内部将全部释放掉,外部不能访问,外部不能访问函数中的私有成员
函数中的私有成员,可以通过它的子函数(闭包)返回到全局供其使用

2.函数的返回值方式:

2.1字符串拼接返回:
代码展示:
  1. <?php
  2. function demo() : string
  3. {
  4. $num = 3;
  5. $status = 'success';
  6. return $num. '.'. $status;
  7. }
  8. echo demo();
  9. ?>
运行结果:
  1. 3.success
2.2数组返回多值:
代码展示:
  1. <?php
  2. function demo() : array
  3. {
  4. $a = 1;
  5. $b = 2;
  6. $c = 3;
  7. $d = 4;
  8. $e = 5;
  9. $f = '上山打老虎';
  10. return [$a, $b, $c, $d, $e, $f];
  11. }
  12. echo implode(',', demo());
  13. ?>
运行结果:
  1. 1,2,3,4,5,上山打老虎
2.3将返回值序列化成字符串返回多值:
代码展示:
  1. <?php
  2. function demo() : string
  3. {
  4. $num = 1;
  5. $message = 'success';
  6. return serialize(['num'=> $num, 'message'=> $message]);
  7. }
  8. echo demo();
  9. echo '<br>';
  10. $arr = unserialize(demo());
  11. print_r($arr);
  12. echo '<br>';
  13. print_r($arr['num']);
  14. ?>
运行结果:
  1. a:2:{s:3:"num";i:1;s:7:"message";s:7:"success";}
  2. Array ( [num] => 1 [message] => success )
  3. 1

3.函数的参数:

3.1值参数:值传递参数,默认方式:
代码展示:
  1. <?php
  2. function getPrice(float $money) : float{
  3. // 在函数中对参数的改变并不会映射到外部的参数
  4. return $money = $money * 2;
  5. }
  6. $var = 1000;
  7. echo getPrice($var);
  8. echo '<br>';
  9. echo $var;
  10. ?>
运行结果:
  1. 2000
  2. 1000
3.2引用参数(在参数前添加取地址符:&):
  1. <?php
  2. function getPrice(float &$money) : float{
  3. // 在函数中对参数的改变会影响到外部的参数
  4. return $money = $money * 2;
  5. }
  6. $var = 1000;
  7. echo getPrice($var);
  8. echo '<br>';
  9. echo $var;
  10. ?>
运行结果:
  1. 2000
  2. 2000
3.3默认函数
  1. <?php
  2. function getPrice(float $a, float $b,string $opt = '+') : string
  3. {
  4. switch($opt) {
  5. case '+';
  6. return sprintf('%d + %d = %d', $a, $b, ($a + $b));
  7. break;
  8. case '-';
  9. return sprintf('%d - %d = %d', $a, $b, ($a - $b));
  10. break;
  11. case '*';
  12. return sprintf('%d * %d = %d', $a, $b, ($a * $b));
  13. break;
  14. case '/';
  15. return sprintf('%d / %d = %d', $a, $b, ($a / $b));
  16. break;
  17. case '/';
  18. if($b !== 0)
  19. return sprintf('%d / %d = %d', $a, $b, ($a / $b));
  20. else die('除数不能为0');
  21. break;
  22. default:
  23. die('非法操作符');
  24. }
  25. }
  26. echo getPrice(10, 5, '+'),'<br>';
  27. echo getPrice(10, 5, '-'),'<br>';
  28. echo getPrice(10, 5, '*'),'<br>';
  29. echo getPrice(10, 5, '/'),'<br>';
  30. echo getPrice(10, 5, '.'),'<br>';
  31. ?>
运行结果:
  1. 10 + 5 = 15
  2. 10 - 5 = 5
  3. 10 * 5 = 50
  4. 10 / 5 = 2
  5. 非法操作符
3.4剩余参数:
3.4.1剩余参数:
代码展示:
  1. <?php
  2. function getPrice()
  3. {
  4. return array_sum(func_get_args());
  5. }
  6. echo getPrice(5,6,7,8,9);
  7. ?>
运行结果:
  1. 35
3.4.2…rest剩余参数:
代码展示:
  1. <?php
  2. //...args:将所有传给参数的所有参数全部压到一个数组中
  3. function getPrice(...$args)
  4. {
  5. return array_sum($args);
  6. }
  7. echo getPrice(5,6,7,8,9);
  8. ?>
运行结果:
  1. 35
3.4.3…rest, …spread混合使用:
代码展示:
  1. <?php
  2. function getPrice(...$args)
  3. {
  4. return array_sum($args);
  5. }
  6. $data = [5,6,7,8,9];
  7. echo getPrice(...$data);
  8. ?>
运行结果:
  1. 35

4.函数的回调执行方式:

  1. 回调函数是异步执行的重要方式
代码展示:
  1. <?php
  2. function demo($a, $b, $c) : string
  3. {
  4. return $a+ $b+ $c;
  5. }
  6. echo call_user_func('demo',1, 2, 3);
  7. echo '<br>';
  8. echo call_user_func_array('demo',[1,2,3]);
  9. ?>
运行结果:
  1. 6
  2. 6

5.函数的命名空间:

  1. php中不允许在同一个命名空间中重复声明同名函数的
代码展示:
  1. <?php
  2. namespace db1;
  3. function demo()
  4. {
  5. return __FUNCTION__;
  6. }
  7. echo demo();
  8. echo '<br>';
  9. namespace db2;
  10. function demo()
  11. {
  12. return __FUNCTION__;
  13. }
  14. echo demo();
  15. echo '<br>';
  16. //调用另一个空间的函数
  17. echo \db1\demo();
  18. ?>
运行结果:
  1. db1\demo
  2. db2\demo
  3. db1\demo

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

6.1单引号
  1. 单引号的意义:本身就是字符;字符串的定界符
  2. 单引号中变量不会被解析
  3. 通过变量与字符串的拼接来输出
  4. 单引号中的特殊字符同样不能被解析
  5. 单引号中出现单引号,必须使用转义符
  6. 单引号中出现转义符,必须连写2个才能正常输出,否则还是转义
代码展示:
  1. <?php
  2. $a = 'hello';
  3. echo '$a,world';
  4. echo '<br>';
  5. echo $a. ',world';
  6. echo '<br>';
  7. echo 'hello,/r/n world';
  8. echo '<br>';
  9. echo $a. ',world,\'hello\'';
  10. echo '<br>';
  11. echo $a. ',\\world';
  12. ?>
运行结果:
  1. $a,world
  2. hello,world
  3. hello,/r/n world
  4. hello,world,'hello'
  5. hello,\world
6.2双引号
  1. 双引号中的变量可以被解析
  2. 双引号中的特殊字符可以被解析
  3. 同页面中的多个空格或回车视为一个
代码展示:
  1. <?php
  2. $a = 'hello';
  3. echo "$a,world";
  4. echo '<br>';
  5. echo "$a,\r\n world";
  6. ?>
运行结果:
  1. hello,world
  2. hello, world
6.3nowdoc
  1. 单引号的PLUS+
  2. 适合纯文本
  3. 不适合嵌入变量或特殊字符
代码展示:
  1. <?php
  2. echo <<<'abc'
  3. This is a test.<br>
  4. abc;
  5. ?>
运行结果:
  1. This is a test.
6.4heredoc
  1. 双引号的PLUS+
  2. 可解析变量
  3. 其中双引号不需要转义
  4. 适合PHP+html编写模版
#代码展示:
  1. <?php
  2. $a = 'hello';
  3. echo <<<ABC
  4. <p>$a,<span style="font-style: italic">world.</span></p>
  5. ABC;
  6. ?>
#运行结果:

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