自定义函数与特殊形式的函数学习

<?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 "数据库连接成功";
?>

  

posted @ 2024-07-04 00:51  好好学习天天向上上上  阅读(5)  评论(0编辑  收藏  举报