zoukankan      html  css  js  c++  java
  • php学习小记1

    1.回调函数

    c语言中的回调函数:通过函数指针调用的函数。将函数a的指针(地址)作为参数传递给另一个函数b,当函数a的指针被b用来调用a时,这就是回调函数,在特定的事件或条件发生时,由另外一方调用,用于对该事件的响应(这个特别像观察者模式。。。)

    php内置的函数call_user_func()和call_user_func_array()提供对回调函数的支持。

    mixed call_user_func ( callable $callback [, mixed $parameter [, mixed$... ]] )

    mixed call_user_func_array ( callable $callback , array $param_arr ),后者是将参数做为一个数组传递的

     

    回调函数有3种类型:自定义的全局回调函数,类的静态方法,对象的方法,

    一个已经实例化的对象的方法作为数组传递,下标为0的包含该对象,下标为1的包含方法名

    静态类方法可不经实例化该类的对象而传递,下标为0的包含该类名,下标为1的包含方法名,或者‘ClassName::methodName’(从PHP5.2.3后开始支持)

    可用create_function()来创建一个匿名回调函数。

    <?php
    	function print_callback($vara, $varb){
    		echo "print_callback"."<br />";
    		echo '$vara = '.$vara."<br />";
    		echo '$varb = '.$varb."<br />";
    	}
    	$var1 = "fun1";
    	$var2 = "fun2";
    	call_user_func("print_callback", $var1, $var2);
    	call_user_func_array("print_callback", array($var1, $var2));
    
    	class MyClass{
    		static function  myCallbackMethod(){
    			echo 'MyClass::myCallbackMethod is called<br />';
    		}
    	}	
    
    	call_user_func(array("MyClass", "myCallbackMethod"));
    	
    	$obj = new MyClass();
    	call_user_func(array($obj, "myCallbackMethod"));
    	call_user_func("MyClass::myCallbackMethod");
    
    	
    	class A{
    		public static function who(){
    			echo 'A<br />';
    		}
    	}
    	class B extends A{
    		public static function who(){
    			echo 'B<br />';
    		}
    	}
    	call_user_func(array('B', "who"));
    	call_user_func(array('B', "parent::who"));
    ?>
    

      结果:

    print_callback
    $vara = fun1
    $varb = fun2
    print_callback
    $vara = fun1
    $varb = fun2
    MyClass::myCallbackMethod is called
    MyClass::myCallbackMethod is called
    MyClass::myCallbackMethod is called
    B
    A

    2.可变函数

    类似于C,C++中的函数指针,这里对于函数名可以用一个变量来代替,变量的值即为函数名。形式:$varfun(...)。当然也适用于对象方法和静态类方法。

    注意如果$varfun后没有括号,那么$varfun将会被当作普通变量使用,如果有括号,那么优先当作可变函数解释。

    <?php
        function foo(){
            echo "foo<br />";
            return "return foo <br />";
        }
        function hello(){
            echo "hello <br />";
            return "return hello <br />";
        }
        $var = "hello";
        echo "echo var ".$var."<br />";
        $var();
        echo "echo var()".$var();
        $var = "foo";
        echo "echo var ".$var."<br />";
        echo "echo var()".$var();
    ?>

      结果:

    echo var hello
    hello 
    hello 
    echo var()return hello 
    echo var foo
    foo
    echo var()return foo 

    3.匿名函数(闭包函数)

    一个没有名称的函数。常用作回调函数参数的值,也可作为变量的值来使用,然后可以采用类似可变函数的调用方式,此时php会自动把此种表达式转换成内置类Closure

    的对象实例。

    <?php
    $var = function(){
        echo "hello world<br />";
    };
    
    echo preg_replace_callback('~-([a-z])~', function($match){
            return strtoupper($match[1]);        
        }, 'hello-world');
    echo "<br />";
    $fruit = function($name){
        printf("fruit name is %s
    <br />", $name);
    };
    
    $fruit('apple');
    $fruit('orange');
    
    ?>

    结果:

    helloWorld
    fruit name is apple 
    fruit name is orange 

    4.作用域:

    PHP中所有函数和类都有全局作用域,要求,一个类或者函数在使用前必须被定义。

    5.函数的其他问题:

    php不支持重载,不能取消定义或者重定义已声名的函数;

    变量名大小写无关;

    支持可变数量的参数和默认参数;

    递归函数,避免调用层数超过100~200层,堆栈容易崩溃。

  • 相关阅读:
    YouTube视频搬运核心技术公布,月赚3万美金
    如何发掘各种暴利的赚钱项目,如何知道别人在干什么赚钱
    新手操作孕妇防辐射服暴利项目,也能日入500+
    最有效的赚钱方法,只有100元如何赚到10万?
    利用音频平台日引1000宝妈粉,轻松日赚500+
    微信小程序的另类玩法,新手也能日赚一千
    手把手教你如何复制暴利项目
    通过小红书精准引流女性粉丝,日赚1000+的网赚项目
    Android客户端与服务器的交互(增删改查)之干货篇(内含代码)
    linux下安装redis
  • 原文地址:https://www.cnblogs.com/bootstar/p/3444416.html
Copyright © 2011-2022 走看看