当前位置: 首页 > 知识库问答 >
问题:

包自动加载问题

潘意
2023-03-14

我正在努力解决如何正确地构建和自动加载我的第一个作曲家包。我明白,如果我遵循PSR-0命名惯例,自动加载应该“正常工作”。我试图设置与:

  • 供应商:程序员
  • 包名称:CoreLibs

我已经设法调试了一个项目,该项目包括包,通过在ClassLoader.php文件的findFileBackExtense()函数中放置一个打印来输出搜索路径

/home/stuart/Desktop/test-project/vendor/Programster/CoreLibs/Programster/Programster/CoreLibs/Core.php

我知道该文件实际位于:

/home/stuart/Desktop/test-project/vendor/Programster/CoreLibs/Core.php

我的包裹是作曲的。json文件:

{
    "name": "Programster/CoreLibs",
    "type": "library",
    "description": "Core libraries for PHP 5.3+",
    "keywords": ["core","library"],
    "homepage": "http://svn.yadda-yadda.com/php/core-libs",
    "license": "none",
    "authors": [
        {
            "name": "xxxx",
            "email": "my.email@email.com",
            "homepage": "http://mywebsite.com/",
            "role": "Developer"
        }
    ],
    "require": {
        "php": ">=5.3.0"
    },
    "autoload": {
        "psr-0": {
            "Programster": "Programster"
        }
    }
}

以下是项目中的一个小脚本,其中包括要测试是否正常工作的包:

<?php

require_once(__DIR__ . '/../vendor/autoload.php');

$loader = new \Composer\Autoload\ClassLoader();
$loader->register();

use \Programster\CoreLibs as programster;
programster\Core::println("hello world");

这个项目的作者。包含包的json文件:

{
    "repositories": [ { "type": "composer", "url": "http://satis.mydomain.com/" } ],
    "require": {
        "Programster/CoreLibs": "dev-trunk"
    }
}

是我的包的配置错误,还是我真的需要在CoreLibs存储库源代码中创建Programster/CoreLibs/子目录?

共有2个答案

沃盛
2023-03-14

我使用了其他人在评论中建议的PSR-4标准,并更新了我的软件包的编写器,从而使它能够正常工作。json文件(请参阅自动加载部分):

{
    "name": "Programster/CoreLibs",
    "type": "library",
    "description": "Core libraries for PHP 5.3+",
    "keywords": ["core","library"],
    "homepage": "http://svn.mydomain/core-libs",
    "license": "none",
    "authors": [
        {
            "name": "MY name",
            "email": "my.email@email.com",
            "homepage": "http://my-website.com/",
            "role": "Developer"
        }
    ],
    "require": {
        "php": ">=5.3.0"
    },
    "autoload": {
        "psr-4": {
            "Programster\\CoreLibs\\": ""
        }
    }
}

这是我在安装了包的项目中的脚本:

require_once(__DIR__ . '/../vendor/autoload.php');
\Programster\CoreLibs\Core::println("hello world");

@sectus是对的,我不需要使用$loader=new\Composer\Autoload\ClassLoader()$装载机-

费德宇
2023-03-14
use \Programster\CoreLibs as programster;
programster\Core::println("hello world");

您的类名计算结果为\Programster\CoreLibs\Core

有了这个PSR-0自动加载,

    "psr-0": {
        "Programster": "Programster"
    }

类名将完全转换为路径名,如“Programster/CoreLibs/Core.php”,该路径将在相对于库composer的目录“Programster”中搜索。json位置。

使用PSR-4自动加载,

    "psr-4": {
        "Programster\\CoreLibs\\": ""
    }

此定义中的前缀将从类名中删除,其余部分将被转换为路径(即路径)。Core.php)并且在所提到的路径中被搜索(在这种情况下,在库的主目录中,因为Core.html" target="_blank">php是指向没有任何子目录的文件)。

你的第二个定义在某些方面更好。它使用较长的前缀,如果您包含使用相同前缀的多个库,这是相关的,因为这样Composer将不得不搜索多个路径来查找类。它使用更短的路径,这也允许稍微快一点的磁盘I/O操作(不过,我还没有做任何性能测量)。

 类似资料:
  • 我在使用Composer设置类自动加载方面遇到了很多麻烦,在这一点上,我已经阅读并观看了数以百万计的参考资料 一些快速版本信息: PHP-v5。6.17 项目布局比较简单: “composer.json”当前包含以下内容: 每当我更改目录结构、重命名类或修改“composer.json”时,我都会运行: 我的目标是从“框架”中的“类”、“配置”和“模型”文件夹中自动加载所有类;“index.php

  • 我们已经为我们的Potion插件写了大量的功能,覆盖了本书所要讲的内容。 在结束之前,我们将讲到一些非常重要的方法,可以给我们的插件锦上添花。 第一项是使用自动加载让我们的插件更有效率。 如何自动加载 目前,当用户加载我们的插件时(比如打开了一个Potion文件),所有的功能都会被加载。 我们的插件还很小,所以这大概不是什么大问题,但对于较大的插件,加载全部代码将会导致可被察觉的卡顿。 Vim使用

  • 这篇文章是对 PHP自动加载功能 的一个总结,内容涉及 PHP自动加载功能 、PHP命名空间、PSR0/PSR4标准 等内容。 一、PHP 自动加载功能 PHP 自动加载功能的由来 在 PHP 开发过程中,如果希望从外部引入一个 Class ,通常会使用 include 和 require 方法,去把定义这个 Class 的文件包含进来。这个在小规模开发的时候,没什么大问题。但在大型的开发项目中,

  • Yii 依靠类自动加载机制来定位和包含所需的类文件。 它提供一个高性能且完美支持PSR-4 标准 的自动加载器。 该自动加载器会在引入框架文件 Yii.php 时安装好。 注意: 为了简化叙述,本篇文档中我们只会提及类的自动加载。 不过,要记得文中的描述同样也适用于接口和Trait(特质)的自动加载哦。 使用 Yii 自动加载器 要使用 Yii 的类自动加载器,你需要在创建和命名类的时候遵循两个简

  • 使用 spl_autoload_register() 来注册你的自动加载函数。 PHP 提供了若干方式来自动加载包含还未加载的类的文件。 老的方法是使用名为 __autoload() 魔术全局函数。 然而你一次仅能定义一个 autoload() 函数,因此如果你的程序包含一个也使用了 autoload() 函数的库,就会发生冲突。 处理这个问题的正确方法是唯一地命名你的自动加载函数,然后使用 sp

  • CodeIgniter 的"自动加载"特性可以允许系统每次运行时自动初始化类库、辅助函数和模型。 如果你需要在整个应用程序中全局使用某些资源,为方便起见可以考虑自动加载它们。 支持自动加载的有下面这些: libraries/ 目录下的核心类 helpers/ 目录下的辅助函数 config/ 目录下的用户自定义配置文件 system/language/ 目录下的语言文件 models/ 目录下的模

  • 问题内容: 是否可以在运行时加载特定的程序包?我想要一种插件,每个插件具有与其他插件相同的功能,但行为不同,并根据配置文件加载一个或另一个。 问题答案: 您可能会考虑在运行时执行“插件”程序包,方法是编写一个新程序(例如到temp目录),然后通过exec.Command执行,类似于 您将在此处看到一些类似的代码。

  • 本文向大家介绍idea2020.1无法自动加载maven依赖的jar包问题及解决方法,包括了idea2020.1无法自动加载maven依赖的jar包问题及解决方法的使用技巧和注意事项,需要的朋友参考一下 解决方法:maven的配置文件 然后在idea的setting中配置如下的参数: -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.s