变量过滤器的常用函数与用法
1.过滤单个变量:
filter_var();
代码展示:
<?php
$age = 30;
$options = ['options'=>['min_range'=>18,'max_range'=>60]];
var_dump(filter_var($age,FILTER_VALIDATE_INT,$options));
echo '<br>';
$email = '123@php';
var_dump(filter_var($email,FILTER_VALIDATE_EMAIL));
?>
运行结果:
int(30)
bool(false)
2.过滤多个变量:
filter_var_array();
代码展示:
<?php
$a = 'ABC';
$b = '123';
$c = true;
$d = 123;
var_dump(filter_var_array([$a,$b,$c,$d],FILTER_VALIDATE_BOOLEAN));
?>
运行结果:
array(4) {
[0]=>
bool(false)
[1]=>
bool(false)
[2]=>
bool(true)
[3]=>
bool(false)
}
3.过滤外部变量
filter_input();
代码展示:
<?php
echo 'id= ' . $_GET['id'];
echo '<br>';
$options = ['options'=>['min_range'=>1]];
var_dump(filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT,$options));
?>
运行结果:
id= 998
int(998)
4.验证多个外部变量
filter_input_array();
代码展示:
<?php
$args = [
'id'=>FILTER_VALIDATE_INT,
'username'=>FILTER_SANITIZE_STRING,
'email'=>FILTER_VALIDATE_EMAIL,
'blog'=>FILTER_VALIDATE_URL,
];
var_dump(filter_input_array(INPUT_GET,$args));
?>
运行结果:
array(4) {
["id"]=>
int(998)
["username"]=>
string(2) "GW"
["email"]=>
bool(false)
["blog"]=>
bool(false)
}
函数
1.函数类型
1.1系统函数/内置函数(直接调用):
mb_substr();
代码展示:
<?php
$str = '本文实例为大家分享了几个常用的php短信接口代码';
mb_substr($str,2,7);
echo mb_substr($str,2,7);
?>
运行结果:
实例为大家分享
1.2自定义函数:
代码展示:
<?php
function getPrice(float $price, float $discount) : float {
return $price * $discount;
};
echo '折后价格:'. getPrice(100, 0.8). '元';
?>
运行结果:
折后价格:80元
1.3可变函数(将函数名称放在一个变量中进行引用):
代码展示:
<?php
function getPrice(float $money, float $discount) : float{
return $money * $discount;
}
$funcname = 'getPrice';
echo '折后价格:'. $funcname(110, 0.8). '元';
?>
运行结果:
折后价格:88元
1.4匿名函数:
代码展示:
<?php
$getPrice = function(float $money, float $discount) : float{
return $money * $discount;
};
echo '折后价格:'. $getPrice(100, 0.8). '元';
?>
运行结果:
折后价格:80元
1.4.1匿名函数在PHP中又称为“闭包”,可以访问上一级空间的成员:
代码展示:
<?php
$discount = 0.8;
$getPrice = function(float $money) use($discount) : float{
return $money * $discount;
};
echo '折后价格:'. $getPrice(100). '元';
?>
运行结果:
折后价格:80元
1.4.2“闭包”更多用于子函数:
代码展示:
<?php
$f = function($discount){
$p = function(float $money, int $n) use($discount) : float{
$total = $money * $n;
return($total > 200) ? ($total * $discount) : $total;
};
return $p;
};
$p = $f(0.8);
echo '折后价格:'. $p(100, 3). '元';
?>
运行结果:
折后价格:240元
关于“闭包” |
闭包是匿名函数最常用的应用场景之一 |
闭包是一个子函数,全局不可见,但父函数可见 |
闭包全局无法调用,可以当成父函数的返回值,返回到全局,可以将函数中的内容带给全局使用 |
函数一旦调用完成,内部将全部释放掉,外部不能访问,外部不能访问函数中的私有成员 |
函数中的私有成员,可以通过它的子函数(闭包)返回到全局供其使用 |
2.函数的返回值方式:
2.1字符串拼接返回:
代码展示:
<?php
function demo() : string
{
$num = 3;
$status = 'success';
return $num. '.'. $status;
}
echo demo();
?>
运行结果:
3.success
2.2数组返回多值:
代码展示:
<?php
function demo() : array
{
$a = 1;
$b = 2;
$c = 3;
$d = 4;
$e = 5;
$f = '上山打老虎';
return [$a, $b, $c, $d, $e, $f];
}
echo implode(',', demo());
?>
运行结果:
1,2,3,4,5,上山打老虎
2.3将返回值序列化成字符串返回多值:
代码展示:
<?php
function demo() : string
{
$num = 1;
$message = 'success';
return serialize(['num'=> $num, 'message'=> $message]);
}
echo demo();
echo '<br>';
$arr = unserialize(demo());
print_r($arr);
echo '<br>';
print_r($arr['num']);
?>
运行结果:
a:2:{s:3:"num";i:1;s:7:"message";s:7:"success";}
Array ( [num] => 1 [message] => success )
1
3.函数的参数:
3.1值参数:值传递参数,默认方式:
代码展示:
<?php
function getPrice(float $money) : float{
// 在函数中对参数的改变并不会映射到外部的参数
return $money = $money * 2;
}
$var = 1000;
echo getPrice($var);
echo '<br>';
echo $var;
?>
运行结果:
2000
1000
3.2引用参数(在参数前添加取地址符:&):
<?php
function getPrice(float &$money) : float{
// 在函数中对参数的改变会影响到外部的参数
return $money = $money * 2;
}
$var = 1000;
echo getPrice($var);
echo '<br>';
echo $var;
?>
运行结果:
2000
2000
3.3默认函数
<?php
function getPrice(float $a, float $b,string $opt = '+') : string
{
switch($opt) {
case '+';
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 '/';
return sprintf('%d / %d = %d', $a, $b, ($a / $b));
break;
case '/';
if($b !== 0)
return sprintf('%d / %d = %d', $a, $b, ($a / $b));
else die('除数不能为0');
break;
default:
die('非法操作符');
}
}
echo getPrice(10, 5, '+'),'<br>';
echo getPrice(10, 5, '-'),'<br>';
echo getPrice(10, 5, '*'),'<br>';
echo getPrice(10, 5, '/'),'<br>';
echo getPrice(10, 5, '.'),'<br>';
?>
运行结果:
10 + 5 = 15
10 - 5 = 5
10 * 5 = 50
10 / 5 = 2
非法操作符
3.4剩余参数:
3.4.1剩余参数:
代码展示:
<?php
function getPrice()
{
return array_sum(func_get_args());
}
echo getPrice(5,6,7,8,9);
?>
运行结果:
35
3.4.2…rest剩余参数:
代码展示:
<?php
//...args:将所有传给参数的所有参数全部压到一个数组中
function getPrice(...$args)
{
return array_sum($args);
}
echo getPrice(5,6,7,8,9);
?>
运行结果:
35
3.4.3…rest, …spread混合使用:
代码展示:
<?php
function getPrice(...$args)
{
return array_sum($args);
}
$data = [5,6,7,8,9];
echo getPrice(...$data);
?>
运行结果:
35
4.函数的回调执行方式:
回调函数是异步执行的重要方式
代码展示:
<?php
function demo($a, $b, $c) : string
{
return $a+ $b+ $c;
}
echo call_user_func('demo',1, 2, 3);
echo '<br>';
echo call_user_func_array('demo',[1,2,3]);
?>
运行结果:
6
6
5.函数的命名空间:
在php中不允许在同一个命名空间中重复声明同名函数的
代码展示:
<?php
namespace db1;
function demo()
{
return __FUNCTION__;
}
echo demo();
echo '<br>';
namespace db2;
function demo()
{
return __FUNCTION__;
}
echo demo();
echo '<br>';
//调用另一个空间的函数
echo \db1\demo();
?>
运行结果:
db1\demo
db2\demo
db1\demo
6.字符串的四种创建方式与应用场景:
6.1单引号
单引号的意义:本身就是字符;字符串的定界符
单引号中变量不会被解析
通过变量与字符串的拼接来输出
单引号中的特殊字符同样不能被解析
单引号中出现单引号,必须使用转义符
单引号中出现转义符,必须连写2个才能正常输出,否则还是转义
代码展示:
<?php
$a = 'hello';
echo '$a,world';
echo '<br>';
echo $a. ',world';
echo '<br>';
echo 'hello,/r/n world';
echo '<br>';
echo $a. ',world,\'hello\'';
echo '<br>';
echo $a. ',\\world';
?>
运行结果:
$a,world
hello,world
hello,/r/n world
hello,world,'hello'
hello,\world
6.2双引号
双引号中的变量可以被解析
双引号中的特殊字符可以被解析
同页面中的多个空格或回车视为一个
代码展示:
<?php
$a = 'hello';
echo "$a,world";
echo '<br>';
echo "$a,\r\n world";
?>
运行结果:
hello,world
hello, world
6.3nowdoc
单引号的PLUS+
适合纯文本
不适合嵌入变量或特殊字符
代码展示:
<?php
echo <<<'abc'
This is a test.<br>
abc;
?>
运行结果:
This is a test.
6.4heredoc
双引号的PLUS+
可解析变量
其中双引号不需要转义
适合PHP+html编写模版
#代码展示:
<?php
$a = 'hello';
echo <<<ABC
<p>$a,<span style="font-style: italic">world.</span></p>
ABC;
?>
#运行结果: