zoukankan      html  css  js  c++  java
  • (独孤九剑)--函数

    【一】函数基本语法概述

    简介:函数就是功能,调用一个函数就是在调用一个功能

    特性:①可以通过函数名调用;②可以反复调用

    分类:自定义函数,系统函数

    案例:比如之前介绍过的几个函数,例如is_int(),phpinfo()等函数,例如

    <?php
        $value = 66.6;
        var_dump(is_int($value));//输出结果bool(false)
    ?>

    【二】自定义函数

    ①函数名与变量名命名规则基本一样。但是不区分大小写,在开发时最好保持调用和命名时函数名一致

       命名注意:函数名只能是数字、字母、下划线的组合,之间不能包含空格,数字不能放在首位
    ②所谓参数就是变量,即形参。而调用时传入的则为实参
    ③函数的功能体,即函数的具体功能用大括号{}括起来,代表一个函数的功能区间
    ④函数可以有返回值,也可以没有返回值
    ⑤return执行,其后的代码均不执行
    ⑥函数不能被重载,即相同文档下不能被定义两次

    ⑦函数体的参数如果定义了,调用时未传参数,就会报错

    Warning: Missing argument 1 for value()//翻译为警告:value()缺少参数1

    ⑧函数体的参数如果有默认值,调用时参数可以不填,代码也不会报错

    <?php
        $name = "我被传入调用了";
        value($name);
        value();
        function value($par = "我是默认形参"){
            echo "$par";
        }
    //输出我被传入调用了,我是默认形参
    ?>

    ⑨函数执行完后,return可以将函数体内的值带到函数体外(注意:return只返回,不会输出,若想输出看到结果可以用echo)

    <?php
        function value(){
            $a = 1;
            $b = 2;
            $c = $a + $b;
            return $c;
        }
        $fun = value();
        echo "函数执行返回结果为".$fun;
    ?>

    案例:传参调用

    <?php
        $name = "我被传入调用了";
        value($name);
        function value($par){
            echo "$par";//输出我被传入调用了
        }
    ?>

    【三】自定义函数---变量函数

    可变函数可以理解为可变变量的变形表达

       ①先来回顾下可变变量:

    <?php
        $hello = "world";
        $world = "你好";
        echo $$hello;
    ?>

       $$hello会解析两次

       注意:$$hello外不能加双引号,否则只会按照双引号默认的解析一次的方式来解析

       ②变量函数

        可变函数也叫变量函数,可以用于以后的MVC(模块视图控制器的设计模式),面向对象的设计模式等。比如构造函数里判断有没有登录,登录之后有无操作权限的问题等

        这里我通过改变变量$fu,来调用不同的函数

    <?php
        function one(){
            echo "函数1";
        }
        function two(){
            echo "函数2";
        }
        $fu = 'one';//输出函数1
        $fu = 'two';//输出函数2
        $fu();
    ?>

    【四】自定义函数---回调函数

    回调函数是一种可以配合变量函数、匿名函数实现更加优化和复杂的一种函数结构

    简单理解:就是带有return返回值的函数的随意调用

    场景:在处理一个功能的同时,为了让这个功能的自定义能力在强一些。所以在调用这个函数的时候,还可以传入另一个函数协调处理。

    <?php
        function main($a,$b,$count){
            if(!is_callable($count)){
                return false;
            }
            echo $a+$b+$count($a,$b);
        }
        function part_plus($x,$y){//回调函数+
            $result = $x+$y;
            return $result;
        }
        function part_less($x,$y){//回调函数-
            $result = $x-$y;
            return $result;
        }
        echo main(1,2,'part_plus');//调用+
        echo main(1,2,'part_less');//调用-
    ?>

    【五】自定义函数---匿名函数

     匿名函数就是没有名字的函数,写法较为灵活

    写法一:变量式匿名函数

    直接把函数赋值给变量,调用变量即为调用函数

    <?php
        $show = function($value){//函数赋值给变量
            echo $value."你好";
        };
        $show("Tony");//调用变量
    ?>

    写法二:回调式匿名函数

    就是将回调函数不用加函数,直接写到调用处

    将上面回调函数的案例代码修改一下,把加法的回调函数直接写成匿名函数调用

    <?php
        function main($a,$b,$count){
            if(!is_callable($count)){
                return false;
            }
            echo $a+$b+$count($a,$b);
        }
        echo main(1,2,function($x,$y){//调用
            $result = $x+$y;
            return $result;//返回值
        });
    ?>

    【六】自定义函数---内部函数

    内部函数就是在函数内部又声明了一个函数

    注意:①内部函数名,不能是已存在的函数名

    <?php
        function parent(){
            echo "我是父级函数";
            function child(){    
                echo "我是子级函数";
            };
        };
        // child();调用失败,因为还不存在
        parent();//现在可以调用子级函数了
        child();//因为parent()的执行,使得child()变为已定义的函数
    ?>

    【七】自定义函数---变量作用域

    函数里的参数仅在函数内部执行。函数内声明的变量与函数外变量无关

    个别情况:①想在函数外部执行函数内的私有变量;②想在函数内执行函数外变量

    这时就需要用到超全局变量,例如$_COOKIE,$_SESSION,$_FILES,$_GET,$_POST,$_REQUEST等

    如果想在函数内部访问外部变量,可以用超全局变量$_GLOBALS()将变量转为全局变量(注意:$GLOBALS['var']是外部的全局变量本身)

    <?php
        $value = 1;
        function parent(){
            echo $GLOBALS['value'];
        }
        parent();
    ?>

    或者利用global传递变量(注意:global是起传递参数的作用,而并非使变量的作用域为全局)

    global可以跟多个变量,例global $a,$b,$c等等

    <?php
        $value = 1;
        function parent(){
            global $value;
            echo $value;
        }
        parent();
    ?>

    案例:利用超全局变量$_GLOBALS()将变量转为全局变量,并在函数内部修改外部变量大小

    <?php
        $value = 1;
        function parent(){
            // global $value;
            $change = 2;
            $GLOBALS['value'] = $change;
            echo $GLOBALS['value'];
        }
        parent();
        echo $value;
    ?>

    代码解析:这里我用$_GLOBALS()将变量转为全局变量,所以即使在函数内部。仍然可以覆盖变量值

    【八】自定义函数---参数引用

     函数参数的引用于变量类似

    (1)先来回顾下变量的引用:

    <?php
        $value1 = 1;
        $value2 = &$value1;
        $value1 = 2;
        echo $value1.$value2;//输出结果2,2
    ?>

    代码里&$value1里&为取地址符号,这里将value1的地址指向value2,两者指向了同一个内存地址。所以,只要改变一个,另一个也跟着变化

     (2)函数参数的引用

    如果形参加入了取地址符号,那么参数引用就类似于$value2 = &$value1,就是将形参和实参指向同一个内存。

    此时如果形参在函数体内发生变化,那么实参也会发生变化

    <?php
        $value1 = 1;
        function demo(&$n){
            $n = 10;
            return $n;
        }
        echo demo($value1);//输出10
        echo $value1;//输出10
    ?>

    【九】自定义函数---递归函数

    主要用在文件和文件夹操作

    例如:读取Submit文件夹下多少个子文件,或者具体递归查找某个文件

    特性:递归函数与for循环类似,必须有结束条件,不然会陷入死循环

    递归函数的效率相对于for和switch较低,运用较少,了解即可

    【十】自定义函数----静态变量static

    特点:声明一个静态变量,第二次调用函数的时候,静态变量不会再初始化。

    场景:例如想统计函数被多次调用的次数,可以在函数内部定义一个静态变量,从而保证变量不会在每次加载时被初始化

    <?php
        function demo(){
            static $num = 0;
            $num++;
            echo "我被调用了".$num."次<br>";
        }
        demo();
        demo();
        demo();
    ?>

    原理:静态变量的值在计算机内存会自动保存;而正常变量的值在使用完之后便销毁

    【十一】系统内置函数

    对于PHP服务器开发,手册十分重要

     使用函数重点:①了解函数功能,特别是常用函数的功能;②了解函数参数;③了解函数返回值

    列举6个常用函数注意点

    (1)直接返回boolean

             作用:拷贝一个文件,参数为文件(string类型)

    <?php
        if(copy('a.txt', 'b.txt')){
            echo "复制成功";
        }else{
            echo "复制成功失败";
        }
    ?>

    (2)带有mixed参数的函数调用(mixed表示任何类型的数据),如Array_unshift()

    (3)参数中带有&(取地址符)的参数,一定要传入一个变量作为参数,函数内部改变值

    (4)带有[]的参数表示可选项

    (5)带有callback的函数,表示回调函数,需要传一个函数进来。Array_map

    (6)函数支持的版本

    【十二】文件包含函数

     实际开发里常把程序共用代码放到一个文件里,使用时调用即可,提高了代码的重用率,同时利于编写和维护。

     include,require,include_once,require_once四种写法,参数为文件名(string类型)

    (1)include 和 require 语句

    通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前)。

    include 和 require 语句是相同的,除了错误处理方面:

    语法:

    include 'filename';  
    require 'filename'; 

    错误处理方面对比:

    ①require 会生成致命错误(E_COMPILE_ERROR)并停止脚本,通常包含极为重要的文件

    ②include 只生成警告(E_WARNING),并且脚本会继续

        注意:出错后会出现warning警告,而警告不会终止程序的执行

        因此,如果希望继续执行,并向用户输出结果,即使包含文件已丢失,就得使用 include。

       否则,在框架、CMS 或者复杂的 PHP 应用程序编程中,必须始终使用 require 向执行流引用关键文件。这有助于提高应用程序的安全性和完整性,在某个关键文件意外丢失的情况下。

       作用:包含文件省去了大量的工作。这意味着可以为所有页面创建标准页头、页脚或者菜单文件。然后,在页头需要更新时,只需更新这个页头包含文件即可

    使用场景:

             ①require :当文件被应用程序请求时使用require,因为在框架、CMS或者复杂的PHP应用程序编程中,必须始终使用 require 向执行流引用关键文件。在某个关键文件意外丢失的情况下,这有助于提高应用程序的安全性和完整性。

             ②include:当文件不是必需,且应用程序在文件未找到时应该继续运行时使用include。因为如果希望继续执行,并向用户输出结果,即使包含文件已丢失,就得使用 include。

    (2)include_once()和require_once()

           include_once和require_once:除了功能外,还可以检测,确保文件只被包含一次

    开发里推荐使用include_once和require_once,确保文件不会被重复调用

    【十三】数学常用函数

    列举几个常用数学函数

    注意:以下函数只能传入一个参数

    ①绝对值:abs()

    <?php
        $value = abs(-4); 
        echo $value;//输出-4的绝对值4
    ?>

    ②向上取整:ceil()

    ③向下取整:floor()

    ④取余:fmod()

    ⑤返回数的n次方:pow()

    ⑥保留指定小数点:round()

    <?php
    $value = round(2.2356,2); //保留2位小数点
    echo $value;
    ?>

     ⑦平方根:sqrt()

    <?php
        $value = sqrt(16); 
        echo $value;//输出4
    ?>

    ⑧最大值:max()---输出数组或者数值最大值

    <?php
        $array = array('age' => 2,'age' => 3,'age' => 4 );
        $value = max($array); //输出数组里最大值4
        $value = max(1,2,3)//输出最大值3
        echo $value;
    ?>

    ⑨最小值:min()---输出数组或者数值最小值

    ⑩随机范围整数:mt_rand()

    <?php
        $array = mt_rand(0,1);
        echo $array;//输出0或1
    ?>

    ⑪随机范围整数:rand()

    ⑫获取圆周率:pi()

    【十四】时间函数

    首先了解几个概念时区,世界时,unix时间戳

    时区:1884年华盛顿召开国际经度会议,为了克服时间上的混乱,将全球划分为24个时区。在中国,采用北京所在的东8区为全国统一时间。因此有了时差

    世界时:以格林尼治时间(英国某地区)作为世界时间。国际上某些重大事件用其来标记

    unix时间戳:从Unix纪元(1970年1月1日零时)开始到某一时间的秒数

    (1)设置时区

    通常在配置文件里写好时区设置,每次程序运行,都会读取时区的设置来显示时间

    PHP中设置时区方法小结

    设置时区的函数:date_default_timezone_set(‘');

    获取当前时区的函数:date_default_timezone_get(‘');

    配置好之后重启一下生效

    (2)获取当前unix时间戳

    time()函数用于获取当前unix时间戳

    (3)date() 函数用于对日期或时间进行格式化
    语法:date(format,timestamp)
    日期(格式,时间戳)
    获取简单时间
    format格式参数是必需的,它们规定如何格式化日期或时间
    下面列出了一些常用于日期的字符:
    d - 表示月里的某天(01-31)
    m - 表示月(01-12)
    Y - 表示年(四位数)
    1 - 表示周里的某天
    其他字符,比如 "/", "." 或 "-" 也可被插入字符中,以增加其他格式。例如

    <?php 
    echo "今天是".date("Y年m-d") .date("-l"); 
    //打印结果今天是2017年03-12-Monday 
    ?>

    【十五】日期验证函数

    常用于检测用户输入的时间是否正确

    语法:checkdate(int $day,int $month,int $year)

    如果时间日期有效就返回true,否则返回false

    <?php
        date_default_timezone_set("Asia/Shanghai");  
        var_dump(checkdate(2, 4, 2019)); //返回true
    var_dump(checkdate(2,40,2019)); //返回fasle
    ?>

    【十六】获取本地化时间戳函数

    例如:获取从昨天到此刻的注册用户

    需要两步

    (1)得到当前unix时间戳,用time()函数即可;

    (2)获取昨天指定时间,需要用到mktime()函数(即:make time创建时间),返回时间戳

    语法:mktime(时(必选),分,秒,月,日,年),其中小时为必选参数

    返回的时间戳对用户意义不大,所以需要date函数完成时间的转换

    <?php
        $time = mktime(10,20,20,3,8,2018);
        echo date('y年m月d日',$time);//输出18年03月08
    ?>

    (3)strtotime()

    strtotime() 转换字符串返回时间戳,创建日期
    语法:strtotime(time,now)
    预设时间(具体时间,当前)
    下面的例子通过 strtotime() 函数创建日期和时间:

    <?php 
    $d=strtotime("10:38pm April 15 2015"); 
    echo "创建日期是 " . date("Y-m-d h:i:sa", $d); 
    //输出:创建日期是 2015-04-15 10:38:00am 
    ?> 
    <?php 
    $d=strtotime("now"); 
    echo "当前日期是 " . date("Y-m-d h:i:sa", $d); 
    //输出:当前日期是 2017-03-12 10:38:00am 
    ?> 

    PHP在将字符串转换为日期这方面非常聪明,所以能够使用各种值:tomorrow,next Saturday,+3 Months等。但是strtotime() 并不完美,所以必须记得检查放入其中的字符串。
    案例:输出举例国庆放假还有几天

    <?php 
    date_default_timezone_set("Asia/Shanghai"); 
    $d1=strtotime("October 1"); 
    $d2=ceil(($d1-time())/60/60/24); 
    echo "距离国庆放假还有:" . $d2 ." 天。"; 
    ?> 

    代码解析:
    ①time()返回当前时间戳;
    ②ceil()函数,向上取整(注意:与四舍五入不同,只要多出一点就向上取)

    Math.ceil(5.1)//取整为6 
    Math.ceil(5.05)//取整为6 
    Math.ceil(5)//取整为5

     智能用法:

    strtotime("+1 day")当前时间加1天;strtotime("+1 week")当前时间加1周

    【十七】程序执行时间检测

    经常需要记录程序执行的时间

    测试某个函数运行效率的快慢,有时需要根据程序执行时间做效率判断,有时程序太快,甚至到微秒级别

    所以我们用microtime()函数,返回当前时间戳和微秒数(精确到微秒)

    传入参数true,会返回一个浮点类型的时间戳,便于运算

    <?php
        $time_start = microtime(true);
        for($i=0;$i<100000;$i++){
    
        };
        $time_end = microtime(true);
        $time = $time_end - $time_start;
        echo "$time";
    ?>

    【十八】字符串常用函数

    参考:https://www.cnblogs.com/weblm/p/5791016.html

     数组,字符串,数据库是函数里最常用的3类函数,

     (1)单字节字符串处理函数

     (2)多字节字符串处理函数

     (3)字符串编码转换函数

    注意点:①中文在GBK编码下为2字节,在UTF-8下为3字节。而函数只能处理英文和数字,不能处理中文

    (1)单字节字符串处理函数

    统计:

    strlen()    统计字符串长度

    删除:

    1. trim()   删除字符串两端空格

    2. ltrim()  删除字符串左侧空格

    3. rtrim()  删除字符串右侧空格

    4. chop()  rtrim()的别名

    填充:

    str_pad()         填充指定长度字符串

    str_repeat()     重复使用指定字符串

    加密:

    md5()              字符串md5编码加密

    sha1()             俗称傻1加密

    其他:

    strrev()            反转字符串

    <?php
        echo strrev("Hello Tony!");//!ynoT olleH
    ?>

    分割:

    chunk_split()    按照指定长度,用给定字符分割----------实例chunk_split('123456789',3,',')   分割为123,456,789

     大小写转换:

    strtolower()     字符串小写

    strtoupper()    字符串大写

    ucfirst()          首字母大写

    ucwords()      每个首字母大写

    (2)多字节字符串处理函数

    mb_和conv_用于处理多字节字符,例如:中文

    (3)字符串编码转换函数

    中文主要是GBK和UTF-8两种编码方式

    GBK是双字节,一个中文占2个Bytes字节;UTF-8是三字节

     多看手册练习

    .

  • 相关阅读:
    html添加注释怎么弄?
    编程语言本身是怎么开发出来的?
    一句话说明Facbook React证书的矛盾点
    XAMPP是什么?
    HTTP解析
    version control
    函数式编程语言
    Servlet之Filter
    Build tool
    container和injection
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/8573260.html
Copyright © 2011-2022 走看看