zoukankan      html  css  js  c++  java
  • php可变函数

    php可变函数

    一、总结

    1、 如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它

    2、和js一样,函数名可以赋值给变量$func = 'foo'$func();    注意这里是带引号的foo,也好理解

    二、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()
    ?>

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

    Example #2 可变方法范例

    <?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.

    ?>

    As of PHP 5.4.0, you can call any callable stored in a variable.

    Example #4 Complex callables

    <?php
    class Foo
    {
        static function bar()
        {
            echo "bar ";
        }
        function baz()
        {
            echo "baz ";
        }
    }

    $func = array("Foo", "bar");
    $func(); // prints "bar"
    $func = array(new Foo, "baz");
    $func(); // prints "baz"
    $func = "Foo::bar";
    $func(); // prints "bar" as of PHP 7.0.0; prior, it raised a fatal error
    ?>

    参见 is_callable()call_user_func()可变变量和 function_exists()

  • 相关阅读:
    重新学习Mysql数据库8:MySQL的事务隔离级别实战
    重新学习Mysql数据库7:详解MyIsam与InnoDB引擎的锁实现
    重新学习MySQL数据库6:浅谈MySQL的中事务与锁
    重新学习Mysql数据库5:根据MySQL索引原理进行分析与优化
    重新学习Mysql数据库4:Mysql索引实现原理
    robot_framewok自动化测试
    资源网
    现在都是python 单独开发框架 执行脚本,处理结果,发报告之类的
    事务处理
    研读 ----全栈工程师
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9027282.html
Copyright © 2011-2022 走看看