使用PSR-4配合composer autoload 自动加载文件夹

require 文件很麻烦,使用PSR-4搭配composer一次加载,终生受用。

感觉类似java中的import了,自己先记录一下最近理解的。

用composer管理自己的包吧

安装composer

这个不多赘述

英文版教程

中文版教程

PSR-4规范

PSR-4-autoloader

构建项目目录

|-project

? |-src

? |-View.php

? |-app

? |-Tools.php

|-composer.json

上面路径的View.php在project/src/View.php 中,其他同理,View 和 Tools 只是为了做演示用的。

构建composer.json

打开创建的composer.json文件输入,这里拿monolog做例子。

{
  "require": {
    "monolog/monolog": "1.2.*"
  }
}

用composer加载包

在目录所在的命令行中输入

#linux全局安装下使用该命令
composer install
#windows下使用参考前面的composer教程
composer.phar install

加载完毕之后你的目录应该是这样的

|-project

? |-src

? |-View.php

? |-app

? |-Tools.php

? |-vendor

? |-composer/* composer目录下面的文件不在赘述

? |-monolog/* 同理

? |-autoload.php

|-composer.json

|-composer.lock

测试加载的monolog包

在project目录下创建一个index.php

#index.php
<?php
/**
 * Created by PhpStorm.
 * User: EasyChris<chris@afox.cc>
 * Date: 2017/1/22
 * Time: 10:50
 */
//引入autoload.php文件
require_once ‘vendor/autoload.php‘;
//测试monlog
$log = new Monolog\Logger(‘name‘);
$log->pushHandler(new Monolog\Handler\StreamHandler(‘app.log‘, Monolog\Logger::WARNING));
$log->addWarning(‘Foo‘);
echo ‘success‘;

在浏览器里面访问该文件地址,通常应该是http://127.0.0.1/project/index.php

看到页面success之后,然后再查看project文件夹下面是不是多了一个app.log文件。那么恭喜你成功使用了composer加载包,并且使用该加载的包输出了log日志。

使用PSR-4加载文件

1.编辑composer.json 配置加载目录和空间名

编辑刚才的composer.json文件,添加autoload模块。

{
  "require": {
    "monolog/monolog": "1.2.*"
  },
  "autoload": {
    "psr-4": {
      "Acme\\": "src/",
    }
  }
}

其中Acme\\:"src\"表示,将Acme这么空间名绑定到/project/src这个目录下

然后修改project/src/View.php文件

#View.php
<?php
/**
 * Created by PhpStorm.
 * User: EasyChris<chris@afox.cc>
 * Date: 2017/1/22
 * Time: 11:06
 */
//命名空间为Acme,
namespace Acme;
class View
{
    public static function getView()
    {
        echo "get view";
    }
}

继续返回修改/project/index.php

#index.php
<?php
/**
 * Created by PhpStorm.
 * User: EasyChris<chris@afox.cc>
 * Date: 2017/1/22
 * Time: 10:50
 */
require_once ‘vendor/autoload.php‘;
use Acme\View;

View::getView();

修改完毕之后返回命令行运行

#使用这个命令会自动生成autoload的文件
vagrant@easychris:/var/www/public/test$ composer dump-autoload
Generating autoload files

PS:需要注意一下!

#生成环境下使用
composer dump-atoload -o
#这里的意思是composer dump-autoload --optimize,不是用的话会损失性能。

最后打开http://127.0.0.1/project/index.php如果显示get view 那么,恭喜你配置成功了。

拓展

接下来你就可以继续在src目录下面创建比如Tools.php然后不需要做其他require,便可以直接使用了。非常的方便,可以自己尝试一下。

总结

查看vender下的autoload.php文件你会看到,他其实是return了一个ComposerAutoloaderInitaa62b39f628dda129dc5b4ebdfb2b2ae::getLoader();

#autoload.php
<?php

// autoload.php @generated by Composer

require_once __DIR__ . ‘/composer/autoload_real.php‘;

return ComposerAutoloaderInitaa62b39f628dda129dc5b4ebdfb2b2ae::getLoader();

而这个getLoader()方法做了如下几件事

1.找 Composer\ClassLoader 如果不存在就是生成一个实例放在ComposerAutoloaderInitaa62b39f628dda129dc5b4ebdfb2b2ae 中
2.将 composer cli 生成的各种 autoload_psr4, autoload_classmap, autoload_namespaces(psr-0) 全都注册到 Composer\ClassLoader 中。
3.直接 require 所有在 autoload_files 中的文件

致谢参考

原文地址:https://www.cnblogs.com/php-linux/p/10579949.html

时间: 2024-12-10 11:35:10

使用PSR-4配合composer autoload 自动加载文件夹的相关文章

深入解析 composer 的自动加载原理 (转)

深入解析 composer 的自动加载原理 转自:https://segmentfault.com/a/1190000014948542 前言 PHP 自5.3的版本之后,已经重焕新生,命名空间.性状(trait).闭包.接口.PSR 规范.以及 composer 的出现已经让 PHP 变成了一门现代化的脚本语言.PHP 的生态系统也一直在演进,而 composer 的出现更是彻底的改变了以往构建 PHP 应用的方式,我们可以根据 PHP 的应用需求混合搭配最合适的 PHP 组件.当然这也得益于

Composer 的自动加载机制

Composer 的自动加载机制 Composer 提供了四种自动加载方式,分别是 PSR-0.PSR-4.生成 classmap 以及之间包含 files. PSR-0 方式 PSR-0 方式要求目录名和命名空间层层对应,这样导致目录结构会很深,现在已经被官方废弃了. 但是,因为现在的主流 PHP 框架都已经实现了 PSR-0 方式,所以 Composer 仍然向下兼容.按照 PSR-0 的规则,当加载 User\Info 这个类的时候,那么会去寻找 src/User/Info.php,最后这

使用composer 实现自动加载

准备工作:提前安装好composer 1.创建项目目录OOP 2.OOP目录下新建composer.json文件,composer.json是一个空json文件,代码如下: { } 3.打开控制台,进入项目目录OOP,在OOP目录下运行composer命令: composer install 4.运行后自动生成composer文件目录,目录结构如下: OOP - Vendor - composer - autoload_classmap.php - autoload_namespaces.php

010.CI4框架CodeIgniter, autoload自动加载自己的helper函数类

01.自己定义了一个helper类,里面有个函数用来输出 02.定义一个Controller基本类,我们以后用到的Controllers类都继承自这个类.其中自动加载helper函数如图所示: 03. 我们在继承自BaseController的类中,调用我们自动加载的helper函数 04.打开浏览器,查看输出效果如下: 知识有价,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:382477247)哦,谢谢. 原文地址:https://www.cnblogs.

15.资源加载器,根据配置文件自动加载文件

前言 以前我想自己写一个加载器,用的时候加载,不用的时候再去掉,结果发现这种方式可能因为资源不统一在安卓上可能出现问题,所以搜集资料,弄成根据配置文件加载 思路 设定两个配置文件,screen,res,不同场景对应不同的screen,不同screen使用的资源为res,当切换的screen的res相同时,不对资源处理,直接切换,否则进入load场景等待资源加载和卸载,然后再跳转场景 下图为场景screen配置文件和资源res配置文件,screen配置了加载的背景图(bgImage),随后做配置化

yaf自动加载文件

models下面的文件 例如:Article.php 类名必须是:ArticleModel 调用时:$article_models = new ArticleModel(); library下面的文件 例如:./Function/String.php 类名必须是:Function_String 如果是静态方法,调用时:Function_String::getRandom

使用TreeView加载文件夹

String Path = "C:\\Test"; private void ListDirectory(TreeView treeView, string path) { treeView.Nodes.Clear(); var rootDirectoryInfo = new DirectoryInfo(path); treeView.Nodes.Add(CreateDirectoryNode(rootDirectoryInfo)); } private static TreeNode

优雅的 laravel(1)- Composer概述及其自动加载探秘

刚开始接触laravel,一天时间走马观花的看了一些官方文档之后便开始了laravel的学习.这里谈到的都是最基础的东西,各路大神,可直接略过. composer概述 一开始,最吸引我的当属 Composer 了,因为之前从没用过 Composer . Composer 是PHP中用来管理依赖关系的工具,你只需在自己的项目中声明所依赖的外部工具库,Composer就会帮你安装这些依赖的库文件.运行 Composer 需要 PHP 5.3.2+ 以上版本. 使用composer 第一步,声明依赖关

Laravel 学习笔记之 Composer 自动加载

说明:本文主要以Laravel的容器类Container为例做简单说明Composer的自动加载机制. Composer的自动加载机制 1.初始化一个composer项目 在一个空目录下composer安装Laravel的容器Container包: composer require illuminate/container 然后在该目录下新建一个index.php文件,然后分析下Container类为何能被实例化: <?php /** * Created by PhpStorm. * User: