php composer自动加载那些事

单入口文件

我们知道现在的网站开发都是单入口,就是所有的请求都是通过一个入口文件进行转发处理的,这样的好处是所有的请求都可以进行统一的过滤,而且所有的页面都可以自动加载类

autoload

php提供了两种方法来进行自动加载,一种是使用__autoload 魔术方法自动你加载,一种是使用spl_autoload_register.

  • __autoload全局只能定义一个函数,它会在函数找不到类的时候触发。

  • spl_autolaod_register可以注册绑定多个函数,当没有找打类的额时候,它会从注册的函数队列中查找。

composer

composer是php的依赖包管理工具,类似于nodejs中的npm,类似于python中的pip。

通过composer我们可以引入我们需要的各种扩展类,比如我们想要使用爬虫抓取类,我们只需要这样的操作就可以。

composer require jaeger/querylist

它就会在composer.json中的require写入,然后在vendor中下载对应的代码,然后修改自动引入。

命名空间

命名空间可以简单看成是一个文件夹或者更准确的说它是一个标识符,有了它,我们可以不用担心命名冲突的问题,不同人开发的工具类,只要在它自己的命名空间内,就不会和其它人的冲突。

composer 自动加载

我们平时如果想要自动加载我们的类的话,我们可以先定义好我们自己的命名空间,然后将命名空间和文件夹绑定就可以。

比如: 我们自己在src目录下写了一个类文件Scrapy.php,然后命名空间定义为namespace Menghuiguli;

<?php

namespace Menghuiguli;

class Scrapy
{
    public function  __construct()
    {

    }

    public function info()
    {
        var_dump($this);
    }
}

接下来我们在src目录下的index.php文件自动引入它。

  • 我们引入autoload.php为文件,比如
require "../vendor/autoload.php";
  • 在composer.json中绑定命名空间和文件路径
"autoload": {
    "psr-4":{
        "Menghuiguli\":"src/"
    }
}
  • 使用composr dump-autoload 重新生成自动加载类

  • 在index.php中通过use 使用对应命名空间中的类和方法。

use Menghuiguli\Scrapy;

$scrapy = new Scrpay();
$scrapy->info();