• PHP笔记4__函数/全局、静态变量/函数参数/加载函数库/,,


    <?php
        header("Content-type: text/html; charset=utf-8");
    
    
        echo table(5,5);
    
        function table($rows,$cols){ //函数
            $str = '';
            $str .= '<table border="1" width="800" align="center">';
            $str .= '<caption><h1>表格</h1></caption>';
    
            
            for($i=0;$i<$rows;$i++){
                $bg=($i%2==0)?"#cccccc":"";
                $str .= '<tr bgcolor="'.$bg.'">';
                for($j=0;$j<$cols;$j++){
                    $str .= '<td>'.($i*$cols+$j).'</td>';
                }
                $str .= '</tr>';
            }
            $str .= '</table>';
            return $str;
        }
        
        echo table(10,10);
    
        if(function_exists("table")){ //判断函数是否存在的函数
            echo "existed!<br>";
        }else{
            echo "not existed!<br>";
        }
    
    ?>
    <?php
        header("Content-type: text/html; charset=utf-8");
    
        $name = "I";
        define("cha1","i love u.");
        function demo(){
            echo cha1.'<br>'; //常量/系统自带的一些变量($_POST,$_GET)可以不用global声明
            $name = "She";
            echo $name.'<br>';
            global $name; //声明接下来使用全局变量$name
            echo $name.'<br>';
            $name = "U";
            echo $name.'<br>';
        }
    
        echo $name.'<br>';
        demo();
        echo $name.'<br>';
    
        /**
        静态变量(用处:统计函数被调用的次数~)
        1.在函数中声明的静态变量,只在第一次调用时声明,
        2.第二次以后,一看是静态变量,就到静态区中看一下有没有这个变量,如果有就使用,而不去再声明
        3.静态变量在同一个函数多次调用中共享,在不同函数中不共享。(不仅存储了静态变量名,还存储了是属于哪个函数)
        */
        function demo1(){
            static $c = 0;
            $c++;
            echo $c.'<br>';
        }
        function test(){
            static $c = 0;
            $c++;
            echo $c.'<br>';
        }
        demo1();
        demo1();
        test();
        test();
        test();
        demo1();
        //上面输出:1,2,1,2,3,3
    ?>
    <?php
        header("Content-type: text/html; charset=utf-8");
    
        
        $b = 20;
        function demo(&$a){ //引用
            $a =100;
        }
        echo $b.'<br>';
        demo($b); //只能传变量,不能传数字
        echo $b.'<br>';
    
    
        function demo1($a=123,$b="hello"){ //默认参数
            echo $a.' '.$b.'<br>';
        }
        demo1(); //输出:123 hello
        demo1(321,"keke"); //输出:321 keke
    
    
        /**
        可变参数(如果函数参数太多,用这种方法好)
        */
        function demo2(){
            /*
             func_get_args() //返回一个数组,包含所有参数
             func_num_args() //返回参数总数
            */
            $arr=func_get_args();
            var_dump($arr);
            echo '##########<br>';
            $sum = 0;
            for($i=0;$i<count($arr);++$i){
                $sum+=$arr[$i];
            }
            echo $sum.'<br>';
        }
        demo2(1,2,3,4,5);
    
    
        /**
        变量函数
        */
        function add($a,$b){
            return $a+$b;
        }
        function sub($a,$b){
            return $a-$b;
        }
        $var = 'add';
        echo $var(2.2,3.1).'<br>';
        $var = 'sub';
        echo $var(2.2,3.1).'<br>';
    ?>    
    <?php
        header("Content-type: text/html; charset=utf-8");
    
    
    
        /**
        在使用一个函数的时候,如果传一个变量不能解决多大的问题,就需要将一个过程传入函数中,改变函数的执行行为。
        回调函数:在函数的调用时,在参数中传的不是一个变量或一个值,而是一个函数,这就是回调函数参数
        */
        function cmp1($a,$b){
            if($a==$b) return 0;
            if($a>$b)
                return 1;
            else
                return -1;
        }
        $arr = array(1,5,8,9,-1,-5,-99);
        print_r($arr);
        sort($arr);
        echo '<br>';
        print_r($arr);
        echo '<br>';
        usort($arr,"cmp1"); //从小到大排序
        print_r($arr);
        echo '<br>';
    
    
        /**
        制作回调函数
        */
        function demo($num,$n){
            for($i=0;$i<$num;++$i){
                if($n($i)) continue;
                echo $i.'<br>';
            }
        }
        function test($i){
            if(preg_match('/3/',$i))
                return true;
            else 
                return false;
        }
        function test1($i){
            if($i==strrev($i))
                return false;
            else 
                return true;
        }
        demo(100,'test');
        demo(100,'test1');
    ?>    
    <?php
        header("Content-type: text/html; charset=utf-8");
    
    
        /**
        加载自定义函数库(*:加载并执行)
        include_once() //失败时产生警告
        require_once() //失败时产生致使错误
        */
        include_once('test123.php');
        include_once('test123.php');
        include_once('test123.php');
        include_once('test123.php');
    
        include('test124.txt');
        include('test124.txt');
        include('test124.txt');
        include('test124.txt');
        hello();
    
    
        /**
        匿名函数,也叫闭包函数(只在PHP5.3.0以上版本有效)
        */
        $var = function(){
            echo 'kekekek...'.'<br>';
        }; //一定要以;结束 
        $var();
        var_dump($var); //对象类型
    
    
        /**
        闭包函数:通俗地说,子函数可以使用父函数中的局部变量,这种行为叫做闭包
        【建议:PHP闭包的特性并没有太大的惊喜,其实用CLASS就可以实现类似甚至更强大的功能,不过匿名函数还是挺有用的
                目前还不稳定,不适合正式开发】
        【闭包函数返回时,该函数内部变量处于激活状态,函数所在栈区仍然保留】
        1.闭包外层是个函数
        2.闭包内部都有函数
        3.闭包会return内部函数
        4.闭包返回的函数内部不能有return(因为这样就真的结束了)
        5.执行闭包后,闭包内部变量会存在,而闭包内部函数的内部变量不会存在。
        闭包的应用场景:
        1.保护函数内的变量安全,
        2.在内存中维持一个变量。
        */
        function one(){ //一个简单闭包函数
            $a = 10;
            $b = 12;
            $var = function() use ($a,&$b){
                echo '111111111<br>';
                echo $a.'<br>';
                echo $b.'<br>';
                $a++;
                $b++;
            };
            $var();
            echo '------'.$a.'--------<br>';
            echo '------'.$b.'--------<br>';
            return $var;
        }
        $lol = one();
        $lol();
        $lol(); //一个闭包就是当一个函数返回时,一个没有释放资源的栈区
    ?>    
  • 相关阅读:
    Linux socket本地进程间通信之TCP
    Linux socket本地进程间通信之UDP
    Linux I/O多路转接之select函数
    静态库和动态库的分析
    点云数据 网络
    maskrcnn-benchmark训练注意事项
    redhat7安装maskrcnn-benchmark注意事项
    特征选择
    docker
    可视化
  • 原文地址:https://www.cnblogs.com/fish7/p/4130716.html
Copyright © 2020-2023  润新知