总结函数的返回值,参数
名词解释
- 函数(全局成员):完成特定功能的代码块
- 函数形参:不调用函数
- 函数实参:调用函数时,有实参时,调用时必须传实参
- 命名函数是全局成员 不受作用域限制
函数结构
function 函数名称([参数列表 -形参])
{
函数体
return 返回值
}
自定义函数
function divide($one,$two)
{
return $one/$two;
echo ‘你好’; //这句不执行
}
echo divide(99,9);
return 返回值
- 函数只能返回单个值 如果想返回多个值,返回一个数组,对象。
- return 后面的代码不会被执行
function demo()
{
return sha1(‘wwwphpxnccsdsds’); //返回 40 位长度
return md5(‘wwwphpcn’); //返回 32 位长度
return 1==1;
return new StdClass;
return array(‘12’,’45’);
return 88.88;
return ‘nihao’;
return true;
}
var_dump(demo());
多个值以数组的形式返回
function test()
{
return [‘status’=>1,’msg’=>’登录成功’];
}
print_r(test());
多个值以对象的形式返回
function demo2()
{
return new class()
{
public $name = ‘dianNao’;
public $fenLie = ‘dianQi’;
}
}
$obj = demo2(); //接收
var_dump($obj);echo; //打印对象
echo $obj->name; //访问对象
echo [‘name’]; //访问数组
多个值以 json 字符串的方式返回
function demo3()
{
return json_encode([‘status’=>1,’msg’=>’验证成功’]);
}
var_dump(demo3());
echo ‘<hr>‘;
$res = demo3();
var_dump( json_decode($res,true) ); //json_decode()第二个参数设为 true 拿到数组
函数参数
- 参数为函数的调用者提供一个接口去改变函数体的执行行为
- 可以多个,也可以是 0,多个参数用,隔开
- 没有参数, 函数的执行任务是固定的
- 形参和实参数是一样的
- 参数列表是从左往右传值
封装函数
//返回一个 3 行 2 列的表格
$table = “<table border ='1' cellspacing='0' >“;
for ($i=0; $i < 8; $i++) {
$table .= “<tr>“;
for ($j=0; $j < 7 ; $j++) {
$table .= “<td>西</td>“;
}
$table .= “</tr>“;
}
$table .= ‘</table>‘;
echo $table;
- 封装函数
function createTable(int $rows,int $cols,string $content,string $bgColor) :string
{
$table = “<table border ='1' cellspacing='0' bgColor='$bgColor'>“;
for ($i=0; $i < $rows; $i++) {
$table .= “<tr>“;
for ($j=0; $j < $cols ; $j++) {
$table .= “<td>$content</td>“;
}
$table .= “</tr>“;
}
$table .= ‘</table>‘;
return $table;
}
echo createTable(3,6,’宏’,’red’);
- 不传参数或者少传参数,都会使用默认的参数值,如果用户传了参数,会发生覆盖
剩余参数
- 剩余参数:适应于参数的个数不确定
if(!function_exists(‘test’))
{
function test($a,$b,$c,$d,$e)
{
return $a+$b+$c+$d+$e;
}
echo test(1,2,3,4,5);
}
- 剩余参数用在参数列表中表示收集的作用
function test1(…$args){//剩余参数用在参数列表中表示收集的作用
// var_dump($args);
return array_sum($args);
}
echo test1(234,34324,23232,1,2,3);
- 剩余参数用在函数的调用表达式中 :展开
$arr = [23,34,56,6557];
echo test1(…$arr);
- 数据库的连接
function connect(…$arg)
{
return new PDO($arg[0],$arg[1],$arg[2]);
}
$pdo = connect(‘mysql:dbname=chloe’,’root’,’zhoujielun521’);
var_dump($pdo);
if($pdo) echo “数据库连接成功”;
匿名函数以及变量作用域
匿名函数,闭包 closure 允许临时创建一个没有名称的函数
function getName($name)
{
return “欢迎{$name}来到京东花园<br>“;
}
echo getName(‘小皮皮’);
变量作用域
- 全局变量:函数体外声明的变量
$itemName = ‘iphone 12 pro max 256g’;
$itemPrice = 12585;
function getItemInfo()
{
return sprintf(‘今日主推产品是%s, 商品价格是%d’,$itemName,$itemPrice);
}
// echo getItemInfo();//结论:全局变量在函数体内是无法访问的
// 解决方法 global $GLOBALS
function getItemInfo_pro()
{
// global $itemPrice,$itemName;
return sprintf(‘今日主推产品:%s, 商品价格: %d<br>‘,$GLOBALS[‘itemName’], >$GLOBALS[‘itemPrice’]);
}
echo getItemInfo_pro();
- 局部变量:在函数体内声明的变量
function add()
{
// 子作用域
$leftNum = 25;
$rightNum = 56;
echo “$leftNum + $rightNum = “ .($leftNum + $rightNum);
}
add();
echo $leftNum;
//闭包
$closure1 = function() use ($itemName,$itemPrice)
{
return sprintf(‘今日主推产品是%s, 商品价格是%d’,$itemName,$itemPrice);
};
echo $closure1();
// 闭包作为函数的返回值
function getSite($site)
{
return function($color) use ($site)
{
return sprintf(‘<h1 style="color:%s"><center>%s</center></h1>‘,$color,$site);
};
}
// getSite()函数的返回值是一个闭包 $closure2
$closure2 = getSite(‘淘宝网’);
echo $closure2(‘orange’);
echo getSite(‘淘宝网’)(‘orange’);
// 闭包可以改变全局变量上下文的值 :通过引用传递
$name = ‘灭绝小师太’;
$closure3 = function($newName) use (&$name)
{
$name = $newName;
};
$closure3(‘欧阳克’);
echo $name;
命名空间
- 针对全局成员:常量 函数 类 接口
//函数的命名空间
namespace ns1{
function demo(){
return FUNCTION;
}
// echo demo();ns1\demo
}
// 全局空间
namespace {
function demo(){
return FUNCTION;
}
echo demo();
}
函数区分图
序号 | 分类 | 作用域 | 名称 |
---|---|---|---|
1 | 系统函数 | 全局调用 | 有 |
2 | 自定义函数 | 全局调用 | 有 |
3 | 匿名函数 | 限制 | 无 |
函数名词解析图
序号 | 函数 | 功能 |
---|---|---|
1 | abs | 求绝对值 |
2 | strlen | 求长度 |
3 | json_encode | 转大写 |
4 | strtoupper() | 数组转为 json 字符串 |
5 | json_decode() | 转为 json 字符串转为数组,第二个参数设为 true 拿到数组 |
6 | array_sum() | 计算数组的各个成员的和 |
7 | connect() | 连接数据库 |
笔记
- 函数放在对象中被称为方法
- 数组不可以 echo
- new 的都是类
- 双引号可以解析变量
- …$args 是剩余参数
- 剩余参数适用于数据库的连接
- PDO 是系统中的类
- php 回调是指在主线程函数执行的过程中,突然跳去执行设置的回调函数,回调函数执行结束后, 再回到主线程处理接下来的流程