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(); //一个闭包就是当一个函数返回时,一个没有释放资源的栈区
?>    
时间: 2024-10-09 22:01:37

PHP笔记4__函数/全局、静态变量/函数参数/加载函数库/,,的相关文章

php自定义函数之静态变量

如果我想知道函数被调用了多少次怎么办?在没有学习静态变量的时候,我们没有好的办法来解决. 静态变量的特点是:声明一个静态变量,第二次调用函数的时候,静态变量不会再初始化变量,会在原值的基础上读取执行. 有了这个特点,我们就可以实现,最开始我们的提问:函数调用词数的统计. 先执行10次demo()函数试试,再执行10次test()函数试试:直线电机滑台 <?php function demo() {    $a = 0;    echo $a;    $a++; } function test()

比较全局变量、全局静态变量、局部变量、局部静态变量的区别

比较全局变量.全局静态变量.局部变量.局部静态变量的区别,他们在编译完后存储位置在什么地方.初始化值在什么地方.内存什么时候分配.赋初值对这些变量有哪些影响等.要弄清楚这些问题,首先要弄清楚下面几个知识点. C语言分下面几个存储区: 1.栈区(stack) 由编译器在需要的时候自动分配释放,在不需要的时候就自动清除的变量存储区.通常存放的变量是函数的参数值.局部变量的值等,其操作方式类似于数据结构中的栈. 2.堆区(heap) 一般由程序员去分配释放,和编译器完全没有关系,直接由我们的应用程序去

全局变量和全局静态变量的区别

全局变量与全局静态变量的区别: (a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别. (b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享    即:全局静态变量对组成该程序的其它源文件是无效的. 静态全局变量的作用: (a)不必担心其它源文件使用相同变量名,彼此相互独立. (b)在某源文件中定义的静态全局变量不能被其他源文件使用或修改. ---------------我的七夕面试题 全局变量和全局静态变量的区别,布布扣,bu

【C语言】局部变量、全局变量,局部静态变量,全局静态变量,extern,static的区别

局部变量: 创建在栈区(向下生长),生命周期存在于当前作用域中.     创建时若未初始化,则为随机值. 全局变量: 创建在static区,生命周期一直存在. 创建时若未初始化,则为0. 静态局部变量: 切断了外部链接属性.创建在static区. 创建时若未初始化,则为0. 全局变量和静态变量的存储是放在一块的,初始化了的全局变量和静态变量在一块区域,  未初始化的全局变量和未初始化的静态变量在相邻的另一块区域. 全局静态变量: 切断了外部链接属性,创建在static区,生命周期一直存在. 创建

全局变量与全局静态变量的区别

全局变量与全局静态变量的区别: (a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别. (b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该程序的其它源文件是无效的. (c)具有外部链接的静态:可以在所有源文件里调用:除了本文件,其他文件可以通过extern的方式引用: 静态全局变量的作用: (a)不必担心其它源文件使用相同变量名,彼此相互独立. (b)在某源文件中定义的静态全局变量不能被其他源文件使用

Linux下c函数dlopen实现加载动态库so文件代码举例

dlopen()是一个强大的库函数.该函数将打开一个新库,并把它装入内存.该函数主要用来加载库中的符号,这些符号在编译的时候是不知道的.这种机制使得在系统中添加或者删除一个模块时,都不需要重新编译了.可以在自己的程序中使用 dlopen().dlopen() 在 dlfcn.h 中定义,并在 dl 库中实现.它需要两个参数:一个文件名和一个标志.文件名就是一个动态库so文件,标志指明是否立刻计算库的依赖性.如果设置为 RTLD_NOW 的话,则立刻计算:如果设置的是 RTLD_LAZY,则在需要

lua加载函数require和dofile

Lua提供高级的require函数来加载运行库.粗略的说require和dofile完成同样的功能但有两点不同: 1. require会搜索目录加载文件 2. require会判断是否文件已经加载避免重复加载同一文件. 由于上述特征,require在Lua中是加载库的更好的函数. require使用的路径和普通我们看到的路径还有些区别,我们一般见到的路径都是一个目录列表.require的路径是一个模式列表,每一个模式指明一种由虚文件名(require的参数)转成实文件名的方法.更明确地说,每一个

函数模板,函数模板重载,可变参数模板,函数模板覆盖,通过引用交换数据

 1.函数模板初级,如果想使用模板,需要实例化,实例化的方式是加上<数据类型> #include <iostream> //函数模板可以对类型进行优化重载,根据类型会覆盖 //如果仍然要使用模板函数,需要实例化 template<class T> T add(T a, T b) { std::cout << "T add " << std::endl; return a + b; } int add(int a, int

高阶函数 - 惰性加载函数

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>高阶函数 - 惰性加载函数</title> </head> <body> <div style="width: 100px; height: 100px; background: #f60;" id=&quo