总结函数的返回值,参数

名词解释

  • 函数(全局成员):完成特定功能的代码块
  • 函数形参:不调用函数
  • 函数实参:调用函数时,有实参时,调用时必须传实参
  • 命名函数是全局成员 不受作用域限制

函数结构

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;

回调函数

  • 将一个用户自定的”执行过程”当做参数传递给到函数中,大大滴增大了对该函数功能的扩展
  • 调用函数时不传递标准的变量作为参数,而是将另一个函数作为参数传递到调用的函数中
  • 匿名函数作为回调函数的参数

$func = function($a,$b)
{
return $a+$b;
};
function test(Closure $callback)
{
$a = 10;
$b =20;
echo ‘hello world <br>‘;
echo $callback($a,$b);
}
test($func);

  • php 单线程,同步执行,如果遇到耗时函数会发生阻塞,应该将它改为异步回调执行

function demo1(string $name):string
{
return ‘hello ‘ . $name;
}
echo demo1(‘Peterzhu’);

    1. 回调一个全局函数

//call_user_func(函数名称,参数列表)
echo call_user_func(‘demo1’,’灭绝师太’);
//call_user_func_array(函数名称,[参数数组])
echo call_user_func_array(‘demo1’,[‘灭绝师太’]);

    1. 回调一个匿名函数

$sql = “SELECT uname,email FROM iuser LIMIT 4”;
$demo2 = function($dsn,$username,$password) use ($sql)
{
$pdo = new PDO($dsn,$username,$password);
$stmt = $pdo->prepare($sql);
$stmt->execute();
return $stmt->fetchALL(PDO::FETCH_ASSOC);
};
$res = call_user_func_array($demo2,[‘mysql:dbname=news’,’root’,’zhoujielun521’]);
print_r($res);
// call_user_func,call_user_func_array 还可以异步的调用对象方法
class User
{
// 实例方法
public function hello(string $name):string
{
return “hello $name”;
}
//静态方法: 类调用
public static function say(string $site):string
{
return “welcome $site!”;
}
}
// $User = new User;
//call_user_func,call_user_func_array还可以异步的调用对象的实例方法
// $res = call_user_func_array([new User,’hello’],[‘李四’]);
// echo $res;
//异步的调用对象的静态方法
ob_clean();
$res = call_user_func(‘User::say’,’php 中文网’);
echo $res;

递归函数

  • 函数自身调用自身,但必须在调用自身前有条件判断,否则无限调用下去。

// 声明缓存目录
function delete_dir_file($dir)
{
//声明一个初始状态 默认情况下缓存未被删除
$res = false;
if(is_dir($dir))
{
//成功打开目录流
if($handle = opendir($dir))
{
while (($file = readdir($handle)) !== false){
if($file != ‘.’ && $file != ‘..’ )
{
if(is_dir($dir.’\‘.$file)){
delete_dir_file($dir.’\‘.$file);
}else{
//unlink只能删除一个文件
unlink($dir.’\‘.$file);
}
}
}
}
//关闭目录句柄
closedir($handle);
//目录只有为空的情况下才能被直接删除
if(rmdir($dir))
{
$res = true;
}
}
return $res;
}
$app_path = DIR ;
delete_dir_file($app_path);

命名空间

  • 针对全局成员:常量 函数 类 接口

//函数的命名空间
namespace ns1{
function demo(){
return FUNCTION;
}
// echo demo();ns1\demo
}
// 全局空间
namespace {
function demo(){
return FUNCTION;
}
echo demo();
}


函数区分图

序号分类作用域名称
1系统函数全局调用
2自定义函数全局调用
3匿名函数限制

函数名词解析图

序号函数功能
1abs求绝对值
2strlen求长度
3json_encode转大写
4strtoupper()数组转为 json 字符串
5json_decode()转为 json 字符串转为数组,第二个参数设为 true 拿到数组
6array_sum()计算数组的各个成员的和
7connect()连接数据库

笔记

  • 函数放在对象中被称为方法
  • 数组不可以 echo
  • new 的都是类
  • 双引号可以解析变量
  • …$args 是剩余参数
  • 剩余参数适用于数据库的连接
  • PDO 是系统中的类
  • php 回调是指在主线程函数执行的过程中,突然跳去执行设置的回调函数,回调函数执行结束后, 再回到主线程处理接下来的流程

更多相关文章

  1. 0804-1. 总结函数的返回值,参数? 2. 匿名函数以及变量作用域问题
  2. php之灭绝秘授函数,变量,师太亲传作用域,返回值
  3. 1.总结函数的返回值,参数? 2. 实例演绎你对课上匿名函数以及变量
  4. return返回值,函数参数 ,变量作用域
  5. 函数的参数 返回值 传参 以及理解匿名函数的作用域
  6. 参数,作用域,匿名函数
  7. 【前端 · 面试 】HTTP 总结(五)—— GET 和 POST
  8. PHP基础课第三次作业
  9. PHP编程0804作业:函数的返回值,参数? 匿名函数以及变量作用域

随机推荐

  1. Python爬虫-MongoDB
  2. 用Python搭建一个简单的代理池
  3. 指标又双叒下降了,我到底该怎么给老板分析
  4. 用Python识别图形验证码,实现自动登陆!
  5. KEY私钥格式转换——已有的RSA公私钥转换
  6. 100篇原创文章,可乐de数据分析之路
  7. 2020年出生人口会大跌吗?解读人口数据
  8. ssh 创建多个秘钥对,连接不同的服务器
  9. centos 7 scp命令的使用
  10. 强势回归!再说回归分析