标题:use关键字在PHP中的几种用法

文章目录
    分类:PHP 标签:PHP基础

    use关键字在PHP中的几种用法

    在学习了和使用了这么多年的PHP之后,您知道use这个关键字在PHP中都有哪些用法吗?今天我们就来看一下它的三种常见用法。

    1. 用于命名空间的别名引用

    // 命名空间
    include 'namespace/file1.php';
    
    use FILE1\objectA;
    use FILE1\objectA as objectB;
    
    echo FILE1\CONST_A, PHP_EOL; // 2
    
    $oA = new objectA();
    $oA->test(); // FILE1\ObjectA
    
    $oB = new objectB();
    $oB->test(); // FILE1\ObjectA

    这个想必在日常的工程化开发中会非常常见。毕竟现在的框架都是使用了命名空间的,不管做什么都离不开各种类依赖的调用,在各种控制器文件的上方都会有大量的use xxx\xxx\xxx;语句。

    2. 用于trait特性能力的引入

    // trait
    trait A{
        function testTrait(){
            echo 'This is Trait A!', PHP_EOL;
        }
    }
    
    class B {
        use A;
    }
    
    $b = new B();
    $b->testTrait();

    即使在最近这两年,依然还是见过完全没有用过trait的PHP程序员,不要惊讶,这是真实存在的。想想还有那么多项目都还在用TP3也就不奇怪了。trait特性还是非常方便的一种类功能扩展模式,其实我们可以看作是将这个use放在了类中就成为了trait的引用定义了。

    3. 匿名函数传参

    // 匿名函数传参
    
    $a = 1;
    $b = 2;
    // function test($fn) use ($a) // arse error: syntax error, unexpected 'use' (T_USE), expecting '{' 
    function test($fn)
    {
        global $b;
        echo 'test:', $a, '---', $b, PHP_EOL; // test:---2
        $fn(3);
    }
    
    test(function ($c) use ($a) {
        echo $a, '---', $b, '---', $c, PHP_EOL;
    });
    // 1------3

    这个就有点意思了吧,方法中要调用外部的变量是需要global的,在这里我们直接通过use()也是可以将变量传递过去的。而且这个仅限于在匿名函数中使用。


    测试代码:

    https://github.com/zhangyue0503/dev-blog/blob/master/php/202001/source/use%E5%85%B3%E9%94%AE%E5%AD%97%E5%9C%A8PHP%E4%B8%AD%E7%9A%84%E5%87%A0%E7%A7%8D%E7%94%A8%E6%B3%95.php

    视频链接

    B站视频地址:https://www.bilibili.com/video/BV1uv411C7Gk

    微信视频地址:http://mp.weixin.qq.com/s?__biz=MzIxODQyNTU1MA==&mid=2247484916&idx=1&sn=30bdd758dc74c8d4e47ee486408de0f3&chksm=97ebf455a09c7d437e1293ca14d58d684ef8328e27dfc4f27089c6ab12fdaf059d2f72a540b8&scene=27#wechat_redirect

    微信文章地址:http://mp.weixin.qq.com/s?__biz=MzIxODQyNTU1MA==&mid=2247484468&idx=1&sn=5875c05d6fcd4acbf3e34a2ca7990c23&chksm=97ebf595a09c7c8385b656212d9ee612fe5846a9557bb1e1737dc6c61307c812c6d31a276a06&scene=27#wechat_redirect

    搜索
    关注