zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    “连城决”——预示2008年手机营销体式格式新打破
    都会演出连城诀—诺基亚N78决战入手入手了!
    Lyx:阔别单调的 LaTeX 节制命令
    [转载]Oracle 11g R1下的自动内存经管(2)
    假造化手艺是决胜企业IT化的关头
    请各位博友对HyperV的运用终了指摘
    有199元的Office,还要用盗版吗?
    十一回南通,当晚和同学去小石桥附近的网吧
    Windows 消息
    WinAPI: 钩子回调函数之 MsgFilterProc
  • 原文地址:https://www.cnblogs.com/CraryPrimitiveMan/p/5002664.html
Copyright © 2011-2022 走看看