• 首页
  • 脚本语言
    • php
    • python
    • javascript
  • 编程语言
    • c
    • c++
    • c#
    • sql
    • java
  • 前端
    • html
    • css
  • 服务器
    • apache
    • nginx
  • 数据库
    • mysql
    • oracle
  • 操作系统
    • linux
  • 杂七杂八
  • 关于我

时间:

当前位置:

  • 脚本语言
  • php
  • 使用composer实现php自动加载的一种方式

欢 迎 光 临 My Blog!

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

2017-03-25 22:31:28

By: My

类别:php

907


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

首先需要安装composer:linux下composer的安装

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

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

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


然后我们在libaray目录下创建Hello.php,Model下创建World.php

World.php的内容:

namespace Model;
class World
{
    public function index()
    {
        echo '我是MY';
    }
}

Hello.php的内容:

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


index.php里面的内容:

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

可以看出,我们在Hello类的index方法里调用了World类的index方法,然后我们在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框架使用了namespace,用户在使用框架的过程中也未进行直接引入对应的文件,这会给人一种错觉:使用namespace后php会自动加载文件。其实这是错的,框架其实自己实现了一套自动加载机制,用的人没注意而已,一般是通过namespace算出文件的存储路径,然后实例化的时候,会触spl_autoload_register自动加载函数将文件引入。namespace和自动加载是两码事。


标签: php composer

同 类 型 的 文 章:

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

2017-03-25

907

composer添加中国镜像的方法

2017-03-09

647

linux下composer的安装

2017-03-09

726

我是php测试标题9

2017-03-09

617

直 接 搜 索

热 门 标 签

  • php 6
  • linux 2
  • phpstorm 0
  • mysql 0
  • laravel 1
  • 配置 0
  • javascript 0
  • apache 1
  • 快捷键 0
  • redis 0
  • nginx 1
  • centos 1
  • 命令 1
  • nosql 0
  • html 0
  • windows 1
  • composer 3
  • c++ 0
  • thinkphp 0
  • css 2
  • 编译 0
  • sql 4

最 热 博 文

关 于 本 博 客

2017-03-13 20:21:08

  • 2396

用nginx做反向代理和负载均衡

2017-03-25 18:41:07

  • 1561

ab压测的使用

2017-03-25 21:32:37

  • 1222

日 历

友 情 链 接

书生程序员

码农志

cyf的个人博客

瑾儿博客

懵圈网

疾风博客

风轻云淡

凉凉浅浅

志友的博客

醉红尘

北平不是京城

返 回 顶 部
  • 脚本语言
  • 编程语言
  • 前端
  • 服务器
  • 数据库
  • 操作系统
  • 杂七杂八

©2024 版权所有 鄂ICP备2024074657号-1