Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:现在才学到变量, 是有点慢了
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)
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)
}
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)
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)
}
mb_substr();
<?php
$str = '本文实例为大家分享了几个常用的php短信接口代码';
mb_substr($str,2,7);
echo mb_substr($str,2,7);
?>
实例为大家分享
<?php
function getPrice(float $price, float $discount) : float {
return $price * $discount;
};
echo '折后价格:'. getPrice(100, 0.8). '元';
?>
折后价格:80元
<?php
function getPrice(float $money, float $discount) : float{
return $money * $discount;
}
$funcname = 'getPrice';
echo '折后价格:'. $funcname(110, 0.8). '元';
?>
折后价格:88元
<?php
$getPrice = function(float $money, float $discount) : float{
return $money * $discount;
};
echo '折后价格:'. $getPrice(100, 0.8). '元';
?>
折后价格:80元
<?php
$discount = 0.8;
$getPrice = function(float $money) use($discount) : float{
return $money * $discount;
};
echo '折后价格:'. $getPrice(100). '元';
?>
折后价格:80元
<?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元
关于“闭包” |
---|
闭包是匿名函数最常用的应用场景之一 |
闭包是一个子函数,全局不可见,但父函数可见 |
闭包全局无法调用,可以当成父函数的返回值,返回到全局,可以将函数中的内容带给全局使用 |
函数一旦调用完成,内部将全部释放掉,外部不能访问,外部不能访问函数中的私有成员 |
函数中的私有成员,可以通过它的子函数(闭包)返回到全局供其使用 |
<?php
function demo() : string
{
$num = 3;
$status = 'success';
return $num. '.'. $status;
}
echo demo();
?>
3.success
<?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,上山打老虎
<?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
<?php
function getPrice(float $money) : float{
// 在函数中对参数的改变并不会映射到外部的参数
return $money = $money * 2;
}
$var = 1000;
echo getPrice($var);
echo '<br>';
echo $var;
?>
2000
1000
<?php
function getPrice(float &$money) : float{
// 在函数中对参数的改变会影响到外部的参数
return $money = $money * 2;
}
$var = 1000;
echo getPrice($var);
echo '<br>';
echo $var;
?>
2000
2000
<?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
非法操作符
<?php
function getPrice()
{
return array_sum(func_get_args());
}
echo getPrice(5,6,7,8,9);
?>
35
<?php
//...args:将所有传给参数的所有参数全部压到一个数组中
function getPrice(...$args)
{
return array_sum($args);
}
echo getPrice(5,6,7,8,9);
?>
35
<?php
function getPrice(...$args)
{
return array_sum($args);
}
$data = [5,6,7,8,9];
echo getPrice(...$data);
?>
35
回调函数是异步执行的重要方式
<?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
在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
单引号的意义:本身就是字符;字符串的定界符
单引号中变量不会被解析
通过变量与字符串的拼接来输出
单引号中的特殊字符同样不能被解析
单引号中出现单引号,必须使用转义符
单引号中出现转义符,必须连写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
双引号中的变量可以被解析
双引号中的特殊字符可以被解析
同页面中的多个空格或回车视为一个
<?php
$a = 'hello';
echo "$a,world";
echo '<br>';
echo "$a,\r\n world";
?>
hello,world
hello, world
单引号的PLUS+
适合纯文本
不适合嵌入变量或特殊字符
<?php
echo <<<'abc'
This is a test.<br>
abc;
?>
This is a test.
双引号的PLUS+
可解析变量
其中双引号不需要转义
适合PHP+html编写模版
<?php
$a = 'hello';
echo <<<ABC
<p>$a,<span style="font-style: italic">world.</span></p>
ABC;
?>