返回首页
当前位置: 主页 > 网络编程 > Php实例教程 >

使用composer实现php自动加载的一种方式

时间:2017-10-02 23:01来源:知行网www.zhixing123.cn 编辑:麦田守望者

PHP 的自动加载,之前常用的__autoload和spl_autoload_register,不过最近发现使用composer也可以帮助实现自动加载,也挺好用的,记录一下。

首先需要安装composer:linux下安装composer方法

然后在项目根目录创建library和Model目录和一个composer.json文件,在里面输入如下内容:

{
  "autoload": {
    "classmap": [
      "library",
      "Model"
    ]
  }
}

注:上面内容的library和Model即为自动加载的目录,我们要自动加载的类文件就放在这些目录下。

然后我们在libaray和Model目录下创建两个演示类文件,创建后的目录结构:

1.png

User.php的内容:

namespace Model;
class User
{
    public function info()
    {
        echo '我是书生';
    }
}

Hello.php的内容:

namespace library;
use Model\User;
class Hello
{
    public function index()
    {
        echo 'Hello World!';
        (new User())->info();
    }
}

index.php里面的内容:

(new \library\Hello())->index();

可以看出,我们在Hello类的index方法里调用了User类的info方法,然后我们在index.php里有调用了Hello类的index方法,这时候我们去访问index.php肯定是要报错的,因为我们在调用前并没有引入对应的文件,PHP也不会自动加载。

这时候我们可以打开终端,切换到项目目录下,运行命令:

composer install

运行成功后会看到,在项目下生成可一个vendor目录,里面有不少文件,这时候我们只需要把生成的vendor/autoload.php引入到我们的index.php中就行了,index.php的内容修改为:

include "./vendor/autoload.php";
(new \library\Hello())->index();

然后我们再访问index.php,就正常了,借助composer,php文件实现了自动化加载,至于为什么,看看vendor目录下composer帮我们生成的文件就明白了。

目前,越来越多的php框架使用了namesace,用户在使用框架的过程中也未进行直接引入对应的文件,这会给人一种错觉:使用namespace后php会自动加载文件。其实这是错的,框架其实自己实现了一套自动加载机制,用的人没注意而已,一般是通过namespace算出文件的存储路径,然后实例化的时候,会触spl_autoload_register自动加载函数将文件引入。namespace和自动加载是两码事。

顶一下
(0)
0%
踩一下
(0)
0%
标签(Tag):php php自动加载
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
猜你感兴趣