• PHP的学习--可变函数


    PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。

    可变函数不能用于例如 echoprintunset()isset()empty()includerequire 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。

     

    Example #1 可变函数示例

    <?php
    function foo() {
        echo "In foo()<br />
    ";
    }
    
    function bar($arg = '') {
        echo "In bar(); argument was '$arg'.<br />
    ";
    }
    
    // 使用 echo 的包装函数
    function echoit($string)
    {
        echo $string;
    }
    
    $func = 'foo';
    $func();        // This calls foo()
    
    $func = 'bar';
    $func('test');  // This calls bar()
    
    $func = 'echoit';
    $func('test');  // This calls echoit()
    ?>

    也可以用可变函数的语法来调用一个对象的方法。

    <?php
    class Foo
    {
        function Variable()
        {
            $name = 'Bar';
            $this->$name(); // This calls the Bar() method
        }
    
        function Bar()
        {
            echo "This is Bar";
        }
    }
    
    $foo = new Foo();
    $funcname = "Variable";
    $foo->$funcname();   // This calls $foo->Variable()
    
    ?>

    当调用静态方法时,函数调用要比静态属性优先:

    Example #3 Variable 方法和静态属性示例

    <?php
    class Foo
    {
        static $variable = 'static property';
        static function Variable()
        {
            echo 'Method Variable called';
        }
    }
    
    echo Foo::$variable; // This prints 'static property'. It does need a $variable in this scope.
    $variable = "Variable";
    Foo::$variable();  // This calls $foo->Variable() reading $variable in this scope.
    
    ?>

    可以使用可变函数的方法列表如下:

    <?php
    array_diff_assoc()
    array_diff_key()
    array_diff_uassoc()
    array()
    array_intersect_ukey()
    array_map()
    array_merge()
    array_merge_recursive()
    array_multisort()
    array_push()
    array_replace()
    array_replace_recursive()
    array_unshift()
    call_user_func()
    call_user_method()
    compact()
    dba_open()
    dba_popen()
    echo()
    forward_static_call()
    fprintf()
    fscanf()
    httprequestpool_construct()
    ibase_execute()
    ibase_set_event_handler()
    ibase_wait_event()
    isset()
    list()
    maxdb_stmt_bind_param()
    maxdb_stmt_bind_result()
    mb_convert_variables()
    newt_checkbox_tree_add_item()
    newt_grid_h_close_stacked()
    newt_grid_h_stacked()
    newt_grid_v_close_stacked()
    newt_grid_v_stacked()
    newt_win_choice()
    newt_win_entries()
    newt_win_menu()
    newt_win_message()
    newt_win_ternary()
    pack()
    printf()
    register_shutdown_function()
    register_tick_function()
    session_register()
    setlocale()
    sprintf()
    sscanf()
    unset()
    var_dump()
    w32api_deftype()
    w32api_init_dtype()
    w32api_invoke_function()
    wddx_add_vars()
    wddx_serialize_vars()

    摘自:http://php.net/manual/zh/functions.variable-functions.php

  • 相关阅读:
    【JZOJ5603】【NOI2018模拟3.27】Xjz
    【JZOJ5605】【NOI2018模拟3.26】Arg
    【agc004e】Salvage Robots
    【agc004c】AND Grid
    【agc004d】Teleporter
    【agc002f】Leftmost Ball
    【agc002d】Stamp Rally
    【arc068F】Solitaire
    51nod 1172 Partial Sums V2
    快速数论变换NTT模板
  • 原文地址:https://www.cnblogs.com/CraryPrimitiveMan/p/5002664.html
Copyright © 2020-2023  润新知