
批改狀態(tài):合格
老師批語:回調(diào)函數(shù)后面會(huì)老師會(huì)詳細(xì)講的,盡量趕上老師的進(jìn)度!
//函數(shù)是代碼復(fù)用的重要手段, 函數(shù)是通過調(diào)用來執(zhí)行的,函數(shù)命名要有意義,函數(shù)名以數(shù)字或下劃線開頭(不能以數(shù)字開頭):
function 函數(shù)名稱的標(biāo)識(shí)符(參數(shù)列表) {
函數(shù)體,由一條或多條語句組成,也可以為空
}
//示例:
//聲明函數(shù)demo
function demo($arg){
echo "{$arg}";
}
//調(diào)用函數(shù)
demo($arg='hello world'); //輸出hello world
示例:
//1.自定義函數(shù)
//在PHP7,一個(gè)新的功能,返回類型聲明已被引入。返回類型聲明指定一個(gè)函數(shù)返回值的類型
function getnum($arg, $arg1): float
{
return $arg + $arg1;
}
echo '輸出:' . getnum(11.1, 12) . '<hr>';
// 2. 系統(tǒng)函數(shù),php內(nèi)置的函數(shù),可以直接使用
$pwd = '12345678';
//內(nèi)置的加密算法函數(shù)
echo hash('md5', $pwd) . '<br>';
echo sha1($pwd) . '<hr>';
//3. 可變函數(shù),是把函數(shù)名變?yōu)榱硪粋€(gè)變量的值
function add($arg, $arg1): float
{
return $arg + $arg1;
}
$func = 'add';
echo $func(2, 4) . '<hr>';
//4. 匿名函數(shù),也叫閉包函數(shù),允許臨時(shí)創(chuàng)建一個(gè)沒有指定名稱的函數(shù)。最經(jīng)常用作回調(diào)函數(shù)(callback)參數(shù)的值
$demo = function ($str) {
printf("Hello %s <br>", $str);
};
$demo('World');
//閉包可以從父作用域中繼承變量。任何此類變量都應(yīng)該用 use 語言結(jié)構(gòu)傳遞進(jìn)去
//當(dāng)父作用域是全局時(shí)
$num = 2;
$p = function ($arg) use ($num): float {
return $arg * $num;
};
echo '輸出結(jié)果:' . $p(3.5) . '<br>';
//父作用域是父函數(shù)
$data = [
['name' => 'jack', 'score' => 99],
['name' => 'Anastasia', 'score' => 40],
['name' => 'Abraham', 'score' => 80],
['name' => 'Alexander', 'score' => 59],
];
$f = function ($data) {
//在匿名函數(shù)后面加上"use(父作用域中的變量)"
$p = function ($line) use ($data) : array {
foreach ($data as $item) {
$str[] = [
'name'=> $item['name'],'result'=>($item['score'] > $line) ? '合格' : '不合格'
];
}
return $str;
};
return $p;
};
$s = $f($data)(60);
foreach ($s as $item){
echo $item['name'].':'.$item['result'].'<br>';
}
示例:
<?php
// 函數(shù)是必須有返回值的,默認(rèn)返回值為null 示例如下:
function demo(){}
var_dump(demo());
echo '<hr>';
// 函數(shù)只能返回單一的值,返回多值有以下幾種方式
// 1.通過字符串拼接
function demo1():string
{
$str1 = 'hello';
$str2 = 'php';
return $str1 . $str2;
}
echo demo1().'<hr>';
// 2.通過數(shù)組的方式
function demo2():array
{
$name = '張三';
$age = 22;
return ['name' => $name,'age' =>$age ];
}
var_dump(demo2()['name']);
echo '<br>',(demo2()['age']),'<hr>';
// 3.通過json對(duì)象字面量字符串的方式
function demo3():string
{
$str1 = 'hello';
$str2 = 'world';
return json_encode(['str1' => $str1,'str2' => $str2]);
}
//輸出json格式數(shù)據(jù)
echo demo3(),'<br>';
// 將json數(shù)據(jù)解碼
print_r(json_decode(demo3()));
echo '<hr>';
// 4.序列化的方式
function demo4():string
{
$name = '張三';
$age = 22;
return serialize(['name' => $name,'age' =>$age ]);
}
//序列化后的數(shù)據(jù)
echo demo4(),'<br>';
// 反序列化: 還原
print_r(unserialize(demo4()));
//1.值參數(shù)
$num = 999;
function demo($num): float
{
return $num;
}
//2.引用傳參
$num1 = 666;
//在參數(shù)前添加取地址符&
function demo1(&$num1): float
{
// 函數(shù)內(nèi)部對(duì)參數(shù)的更新會(huì)實(shí)時(shí)映射到外部實(shí)際參數(shù)
return $num1 *= 2;
}
echo $num1, '<br>';//666
echo demo1($num1), '<hr>';//1332
// 3. 默認(rèn)參數(shù)
// 沒有傳參時(shí)默認(rèn)的參數(shù)的值
// 有默認(rèn)值的參數(shù),必須寫到?jīng)]有默認(rèn)值參數(shù)的后面
function demo2($num3, $num4, $n = 3)
{
return $num3 * $num4 * $n;
}
// 沒有傳參數(shù)$n, 此時(shí)會(huì)使用$n的默認(rèn)值3
echo demo2(1, 10) . "<br>";//輸出:30
echo demo2(1, 10, 0.5) . "<hr>";//輸出:5
//4.剩余參數(shù)
//參數(shù)不固定的情況下使用 ...參數(shù)名來表示,將所有參數(shù)整合到數(shù)組中.
//剩余參數(shù)用在函數(shù)的參數(shù)列表中:收集
//剩余參數(shù)用在函數(shù)的調(diào)用表達(dá)式中,是展開
function demo3(...$args)
{
//求傳入?yún)?shù)的和
return array_sum($args);
}
echo demo3(1, 2, 3) . "<br>";//輸出6
// 調(diào)用參數(shù)的數(shù)量不固定的情況
$arr = [1, 2, 3];
$res = demo3(...$arr);
print_r($res);
//5.回調(diào)函數(shù)
//定義一個(gè)數(shù)組
$data = range(1,100);
//將數(shù)組中的每個(gè)值傳到匿名函數(shù)中處理后返回處理以后的新數(shù)組
$arr = array_map(function ($item) {
if ($item % 2 === 0) return $item;
}, $data);
// 過濾掉空值
$res=array_filter($arr);
// 數(shù)組重排 array_values()
var_dump(array_values($res));
namespace s1{
function demo1(){
return "這是space1";
}
}
namespace s2{
function demo1(){
return "這是space2";
}
}
namespace {
echo s1\demo1();
}
總結(jié):初步掌握了函數(shù)的基本用法和參數(shù)傳遞,對(duì)回調(diào)函數(shù)的運(yùn)行機(jī)制還是很模糊;
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)