zoukankan      html  css  js  c++  java
  • PHP学习4

    函数

    函数形参的默认值问题

    我们可以给一个函数定义时的形参,赋值一个默认值,则这个函数调用的时候,该形参对应的实参,可以不给值。

    形参的传值问题

    一句话:形参的传值问题,其实就是变量之间的传值问题

    其实无非就是实参变量,传值给形参变量的问题。

    即:

    此时,也同样有两种传值方式:

    值传递:

    这是默认值。如果没有特别设定,参数传值都是值传递。

    引用传递:

    需要在形参的前面加 &符号:

     

    函数参数的数量问题

    1,通常,函数调用时的实参数量,应该跟函数定义时的形参数量保持一致。

    2,如果函数定义时,形参有默认值,则对应的实参就可以进行一定程度的省略:

    注意:省略只能从右往左进行。

    3,有一种定义和使用函数的特别形式(并不常见):它不定义形参,而实参任意给出。

    其实,系统中也有类似的函数:,比如:

    var_dump($v1);

    var_dump($v1, $v2, $v3); //ok!

    可见,该函数就可以接受任意个数的实参;

    我们自己也可以定义这种函数。其实,这种函数,依赖的是以下3个系统函数来获取相应的信息,以得到实参数据的处理:

    1: func_get_args(); //获取实参数据列表,成为一个数组

    2: func_get_arg($i); //获取第$i个实参数据,$i0开始算起;

    3func_num_args(); //获取实参的数量(个数)

    函数的其他形式:

    可变函数

    先想想可变变量:

    $v1 =”abc”;

    $abc = 123;

    echo  $$v1; //输出123,这就是所谓的可变变量。

    可变变量:一个变量的名字还是一个变量!

    可变函数:一个函数的名字是一个变量!

     1 function f1(){
     2     echo "<br />这是一个普通的函数而已!";
     3 }
     4 $v1 = "f1";
     5 $v1();    //这就是可变函数!
     6 //可变函数其实就是在调用函数的时候,使用一个变量名而已。
     7 //该变量的内部,就是该函数名!
     8 
     9 
    10 function jpg(){ echo "<br />处理jpg图片";}
    11 function png(){ echo "<br />处理png图片";}
    12 function gif(){ echo "<br />处理gig图片";}
    13 $file = "abc.png";//代表用户上传的图片;
    14                 //其后缀肯能是png,jpg,gif等
    15 $houzhui = strrchr($file, ".");
    16     //strrchr($s1,$s2)函数用于获取字符串$s1中最后一次
    17     //出现的字符$s2之后的所有字符内容(含$s2本身)
    18 //echo "<br />$houzhui";//这里输出是:“.png"
    19 $houzhui = substr($houzhui,1);//获得该字符串从位置1开始之后的所有字符
    20                                 //此时$houzhui就是类似这样:"png"
    21 $houzhui();    //可变函数!

    匿名函数

    匿名函数就是没有名字的函数。

    2种形式的匿名函数:

     1 <?php
     2 //将一个匿名函数,赋值给一个变量f1
     3 $f1 = function () {
     4     echo "<br />这是一个匿名函数!";
     5 };
     6 $f1();    //调用该匿名函数,就使用该变量
     7 //可见其形式跟调用可变函数一样!
     8 
     9 //在演示一个带参数的匿名函数:
    10 $f2 = function ($p1, $p2) {
    11     $result = $p1 + $p2;
    12     return $result;
    13 };
    14 $re1 = $f2(3, 4);    //将函数的返回值赋值给$re1;
    15 echo "<br />re1 = $re1";
    16 
    17 echo "<hr />";
    18 function func1($x, $y, $z)
    19 {
    20     $s1 = $x + $y;
    21     $s2 = $x - $y;
    22     $z($s1, $s2);
    23 }
    24 
    25 func1(3, 4,
    26     function ($m1, $m2) {
    27         $n = $m1 * $m2;
    28         echo "<br />两个数是和乘以2个数的差的结果为:$n";
    29     }
    30 );
    31 
    32 func1(3, 4,
    33     function ($m1, $m2) {
    34         echo "<br />m1=$m1, m2 = $m2";
    35     }
    36 );
    37 ?>

    变量的作用域问题

    变量的作用域,就是指:一个变量,在什么范围中可以使用的情况。

    php中,有3中变量作用域:

    局部作用域:

    就是指一个函数的内部范围。

    对应这样的变量,就称为局部变量

    超全局作用域:

    就是指所有的代码范围。

    对应这样的变量,就称为超全局变量

    其实只有系统预定义的几个:$_GET, $_POST, $_SERVER, $_REQUEST, $GLOBALS, $_SESSION, $_COOKIE, $_FILES

    全局作用域:

    就是不在函数内部的范围——函数外部。

    对应这样的变量,就称为全局变量

     1 <?php
     2 //这里演示局部访问全局变量,出错:
     3 $v1 = 1;
     4 function f1(){
     5     echo "<br />在函数内部访问外部:v1 = $v1;";
     6 }
     7 f1();
     8 
     9 
    10 //这里演示全局访问局部变量,出错:
    11 function f2(){
    12     $v2 = 1;
    13 }
    14 f2();
    15 echo "<br />在函数外部访问局部变量:v2 = $v2;";
    16 
    17 echo "<hr />";
    18 function f3(){
    19     static $c = 0;//静态局部变量,它的值会保留
    20                 //而且,此行的赋初值,只会执行第一次
    21     $c++;
    22     $d = 0;        //此行,每次进入函数,都会执行
    23     $d++;
    24     echo "<br />c=$c, d=$d, (此函数被调用次数为:$c)";
    25     //到此行之后,函数结束,其中的$d变量就被销毁了!
    26 }
    27 f3();
    28 f3();
    29 f3();
    30 
    31 echo "<hr />";
    32 $v4 = 4;
    33 function f4(){
    34     //在函数中,使用global来声明一个要使用的全局变量的同名局部变量。
    35     global $v4;    //这里,$v4是局部变量,只是跟全局的v4同名
    36                 //实际情况是:此时外部v4变量跟内部的v4变量,共同
    37                 //指向一个数据区——引用关系!
    38     echo "<br />在局部访问全局变量v4 = $v4";
    39     $v4 = 44;    //修改其值;
    40 }
    41 f4();
    42 echo "<br />在全局再次访问v4 = $v4";
    43 
    44 
    45 echo "<hr />";
    46 $v5 = 5;    //全局变量
    47 function f5(){
    48     //$GLOBALS可以认为是全局变量的另一种使用形式!
    49     echo "<br />在局部访问全局变量v5 = " . $GLOBALS['v5'];
    50     $GLOBALS['v5'] = 55;    //修改其值;
    51 }
    52 f5();
    53 echo "<br />在全局再次访问v5 = " . $v5;
    54 echo "<br />在全局再次访问v5 = " . $GLOBALS['v5'];
    55 
    56 
    57 
    58 echo "<hr />";
    59 $v6 = 6;    //全局变量
    60 function f6(){
    61     //$GLOBALS可以认为是全局变量的另一种使用形式!
    62     echo "<br />在局部访问全局变量v6 = " . $GLOBALS['v6'];
    63     $GLOBALS['v6'] = 66;    //修改其值;
    64     unset($GLOBALS['v6']);
    65 }
    66 f6();
    67 echo "<br />在全局再次访问v6 = " . $v6;
    68 
    69 
    70 ?>

    有关函数的系统函数:

    • function_exists():判断一个函数是否被定义过。其中使用的参数为“函数名”:

     

    • func_get_arg($i): 获取第i个实参值
    • func_get_args(): 获取所有实参(结果是一个数组)
    • func_num_args(): 获取所有实参的个数。

    其他系统函数:

    自己会查,并需要去查:

    • 字符串函数:
      • 输出与格式化:echo , print, printf, print_r, var_dump.
      • 字符串去除与填充:trim, ltrim, rtrim, str_pad
      • 字符串连接与分割:implode, join, explode, str_split
      • 字符串截取:substr, strchr, strrchr,
      • 字符串替换:str_replace, substr_replace
      • 字符串长度与位置: strlen, strpos, strrpos,
      • 字符转换:strtolower, strtoupper, lcfirst, ucfirst, ucwords
      • 特殊字符处理:nl2br, addslashes, htmlspecialchars, htmlspecialchars_decode,
    • 时间函数:
      • time, microtime, mktime, date, idate, strtotime, date_add, date_diff, date_default_timezone_set, date_default_timezone_get
    • 数学函数:
      • max, min, round, ceil, floor, abs, sqrt, pow, round, rand
  • 相关阅读:
    质量属性论文
    四月份-读书笔记 构建之法
    基于二元模型的拼音输入法
    融云单聊
    Gogs私有git仓库 + Drone构建CI/CD
    仿jq ajax封装支付宝小程序request.js
    Electron 和 Angular 构建桌面应用程序
    css多行溢出省略号
    package-lock和package.json
    控制窗体的小程序
  • 原文地址:https://www.cnblogs.com/liqiantu/p/5840718.html
Copyright © 2011-2022 走看看