自定义函数与特殊形式的函数学习
<?php // 命名函数是全局成员 不受作用域的限制 // 匿名函数,闭包 closure 允许临时创建一个没有名字的函数 echo getName('蓝波宝宝'); function getName($name) { return" 欢迎{$name}来到phpp中文网做客<br>"; } // echo getName('蓝波宝宝'); // echo $closure('喵喵');闭包作用域的问题 $closure = function($name) { return"欢迎{$name}来到phpp中文网做客<br>"; }; echo $closure('喵喵'); // 变量的作用域 // 全局变量 函数体外声明的变量 $itemName = 'iphone 12 pro max 256'; $itemPrice =1225; function getItemInfo() { return sprintf('今日主推产品是%s,商品价格是%d', $itemName,$itemPrice); } // echo getItemInfo();//结论:全局变量在函数体内是无法访问的 // 解决方法 global $GLOBALS function getItemInfo_pro() { // global $itemName,$itemPrice; 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; ?>
<?php // 函数(全局成员)完成特定功能的代码块 // echo strtoupper('imzchloe'); // echo strlen('阳光真好我好开心o(* ̄▽ ̄*)ブ'); // echo abs(-4); // function 函数名称 ([参数列表 -形参]) // { // 函数体 // return 返回值 // 1.函数只能返回单个的值 如果想返回多个值,返回一个数组,对象。 // 2.return后面的代码不会被执行 // } function divide($one,$two) { return $one/$two; // echo '你好呀,小可爱' } // echo divide(99,9); function demo() { return sha1('dfrescfre'); return md5('dfffdf'); 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 = 'chloe'; public $gender = '女'; }; } // $obj = demo2(); // var_dump($obj); // echo '<hr>'; // echo $obj->name; // echo $obj->gender; // 多个值以json字符串的1方式返回 function demo3() { // json_encode()将数组转为json字符串 return json_encode(['status'=>1,'msg'=>'验证成功']); } var_dump(demo3()); echo '<hr>'; $res = demo3(); // json_decode()第二个设为true拿到数组 var_dump( json_decode( demo3($res,true))); ?>
<?php
// 多个参数可以用,号隔开
// 1.参数为函数的调用者一个接口去改变函数体的执行行为
// 2.没有参数,函数的执行任务是固定的
function demo($name)
{
echo"你好$name<br>";
}
demo('蓝波');
demo("喵喵");
//返回一个3行2列的表格
$table = "<table border ='1' cellspacing='0'>";
for ($i=0; $i < 9; $i++){
$table.="<tr>";
for ($j=0; $j < 5; $j++){
$table.="<td>习</td>";
}
$table.="</tr>";
$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,10,'小','red');
function createTable1(int $rows=7 ,int $cols=7 ,string $content='大', string $bgColor='green'):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 createTable1(5,5,'饿','orange');
// echo createTable1('饿','orange');//报错
// 1. 参数列表是从左往右传的值
// 2.不传参数或者少传参数,都会使用默认的参数,如果用户传了参数,会发生覆盖
// echo createTable1(8,8,);
echo createTable1();
echo createTable1(5,6,'pink','pink');
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 (5552,488,5,4,12,7);
$arr = [55,47,46,52,54];
// 剩余参数用在函数的调用表达式中:展开
echo test1(...$arr);
// 数据库的连接
function connect(...$arg)
{
return new PDO($arg[0],$arg[1],$arg[2]);
}
$pdo = connect('mysql:dbname=chloe','root','zhoujieluen521');
var_dump($pdo);
if($pdo) echo "数据库连接成功";
?>