加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP的“使用”关键字和自动加载

发布时间:2020-12-13 21:33:14 所属栏目:PHP教程 来源:网络整理
导读:我的问题分为三个部分: 使用use语句是否会立即触发自动加载器,还是等到使用该类? (延迟加载) 如果不以延迟加载方式进行自动加载,是否会对性能产生负面影响? 最好遵循哪种模式,为什么?当不使用use语句时,PhpStorm将“不必要的完全限定名称…”显示为代码
我的问题分为三个部分:

>使用use语句是否会立即触发自动加载器,还是等到使用该类? (延迟加载)
>如果不以延迟加载方式进行自动加载,是否会对性能产生负面影响?
>最好遵循哪种模式,为什么?当不使用use语句时,PhpStorm将“不必要的完全限定名称…”显示为代码问题.

这是一个带有use语句的Laravel控制器的示例类定义:

namespace AppHttpControllers;

use CarbonCarbon;

class FooController extends Controller
{
    /**
     * This action uses the Carbon class
     */
    public function bar1()
    {
        return view('foo.bar1',['now' => new Carbon()]);
    }

    /**
     * This action does not use the Carbon class
     */
    public function bar2()
    {
        return view('foo.bar2');
    }
}

没有use语句的同一个类:

namespace AppHttpControllers;

class FooController extends Controller
{
    /**
     * This action uses the Carbon class
     */
    public function bar1()
    {
        return view('foo.bar1',['now' => new CarbonCarbon()]);
    }

    /**
     * This action does not use the Carbon class
     */
    public function bar2()
    {
        return view('foo.bar2');
    }
}

解决方法

1)执行新的Class()语句时,类会自动加载.

2)见1)

3)最好遵循哪种模式以及为什么?:

我建议使用use,因为你可能会遇到一个很长的命名空间,你的代码将变得不可读的情况.

从php docs:

This example attempts to load the classes MyClass1 and MyClass2 from
the files MyClass1.php and MyClass2.php respectively.

<?php
spl_autoload_register(function ($class_name) {
    include $class_name . '.php';
});

$obj  = new MyClass1();
$obj2 = new MyClass2(); 
?>

命名空间只是组织类的附加功能.

编辑:正如@IMSoP在评论中指出的那样,新的并不是自动加载器被触发的唯一时间.访问class constant,static method或static property也会触发它,运行class_exists也是如此.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读