zoukankan      html  css  js  c++  java
  • PHP学习日记 函数

    可变函数

      PHP支持可变函数的概念。所以如果一个变量后面有圆括号“()”,PHP将寻找与变量值同名的函数,并尝试执行此函数,可变函数可以用来实现回调函数、函数列表等。可变函数不能用于echo、print、unset、isset、array等等类似的语言结构,需要使用自己的包装函数来将这些结构作为可变函数。可变函数还可以用于对象方法的调用。

    <?php
    function foo(){
        echo "foo
    ";
    }
    function bar(){
        echo "bar
    ";
    }
    
    $func="foo";
    $func();
    $func="bar";
    $func();
    $func="echo";
    $func("echo");
    ?>


            PHP5.4起,如果数组中为合法调用,则可以做为可变函数,用于调用类中方法时使用,数组长度必须为2,第一个值为类名或其他合法形式,第二值为要调用的方法名。PHP7.0起支持ClassName::methodName为可变函数。

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


            内置函数
            PHP超全局变量PHP 有很多标准的函数和结构。还有一些函数需要和特定地 PHP 扩展模块一起编译,否则在使用它们的时候就会得到一个致命的“未定义函数”错误。有很多核心函数已包含在每个版本的 PHP 中如字符串和变量函数。调用 phpinfo() 或者 get_loaded_extensions() 可以得知 PHP 加载了那些扩展库。同时还应该注意,很多扩展库默认就是有效的。
            匿名函数
            匿名函数PHP5.3新增,也叫闭包函数,是一个临时创建的没有指定名称的函数,经常用做回调函数参数的值。匿名函数是通过闭包类Closure来实现的。PHP会自动把匿名函数转换为Closure对象的实例。把一个Closure对象赋值给一个变量与普通的变量赋值是一样的。通过使用use语言结构可以匿名函数可以从父作用域继承变量。继承变量有两种方式,一种是继承变量的值,一种是变量的引用。此外,匿名函数还可以接受普通的参数。匿名函数的父作用域是定义该匿名函数的函数。

    <?php
    $message = 'hello';
    // 没有 "use"
    $example = function () {
    var_dump($message);
    };
    //值为null
    $example();
    
    // 使用"use" 继承 $message
    $example = function () use ($message) {
    var_dump($message);
    };
    //值为hello
    $example();
    
    $message = 'world';
    //值传递,继承变量的值在方法定义时被确定,所以输出为hello
    $example();
    
    //引用传递
    $example = function () use (&$message) {
    var_dump($message);
    };
    //参数值的修改会传递到匿名函数内,所以输出为World
    $message = 'World';
    $example();
    //
    $example = function ($arg) use (&$message) {
    var_dump($arg.$message);
    };
    $example("hello");
    ?>
            PHP5.4起,$this可在匿名函数中使用<?php
    class Test
    {
    public function testing()
    {
    return function() {
    var_dump($this);
    };
    }
    }
    
    $object = new Test;
    $function = $object->testing();
    $function();
    ?>


            PHP7.1起,匿名函数继承的变量不能是超全局变量、$this以及与函数参数名同名的变量。
            静态匿名函数
            PHP5.4起,当在类的上下文中声明匿名函数,当前类会自动绑定到匿名函数,使$this变量在函数中可用,如果不想自动绑定当前类,就需要声明为静态匿名函数。

    <?php
    class Foo{
    function foo(){
    $func=static function(){
    var_dump($this);
    };
    return $func();
    }
    }
    $foo=new Foo;
    $foo->$foo();
  • 相关阅读:
    MongoDB配置客户端
    fatal: refusing to merge unrelated histories
    Connection reset by [server_ip] port 22 (hexo d 部署博客出错)
    hexo d 部署博客时出错
    git reset --hard xxxxxxx
    查看MySQL版本的命令及常用命令
    log4j 知识点
    ssh 登录报错 packet_write_wait: Connection to x.x.x.x port 22: Broken pipe
    Windows&Word 常用快捷键
    Apache所有开源项目文件
  • 原文地址:https://www.cnblogs.com/GHzcx/p/10397473.html
Copyright © 2011-2022 走看看