【问题标题】:Where should I write my code so that Composer can autoload my PHP classes?我应该在哪里编写代码以便 Composer 可以自动加载我的 PHP 类?
【发布时间】:2015-09-15 13:35:28
【问题描述】:

我是 Composer、命名空间和自动加载的新手,我不知道在哪里编写我的代码(在 vendor? 下)。

我在vendor 下创建了一个名为ilhan 的目录,以及一个名为People.php 的文件。然后在主index.php 文件中使用use ilhan\People.php as People; 不起作用,因为我认为它最初一定是用autoload_namespaces.php 编写的。

但如果我将ilhan 注册为供应商,那么我认为 Composer 会查看它不存在的 packagist.org。

【问题讨论】:

    标签: php namespaces composer-php autoload


    【解决方案1】:

    在项目目录的根目录中创建ilhan,而不是在vendor 目录中,并将以下内容放入您的composer.json

       "autoload": {                    
            "psr-4": {
                "Ilhan\\": "ilhan/"
            }               
        },
    

    如果您使用某种框架,很可能您已经在 composer.json 文件中添加了 psr-4 自动加载配置,在这种情况下,只需添加 "Ilhan\\": "ilhan/" 即可。 现在在ilhan 目录中创建People.php,内容如下

    <?php
    
      namespace Ilhan;
    
      class People{}
    

    确保require __DIR__.'/vendor/autoload.php'; 包含在index.php 中,然后运行composer dump-autoload

    现在在index.php 下方require __DIR__.'/vendor/autoload.php'; 应该可以使用,

    use Ilhan\People;
    

    但是为什么要在index.php 中使用People 类呢?

    【讨论】:

    • 谢谢!它完全按照我的意愿工作! People 类仅用于测试目的,我将其移至另一个文件。我使用Restler
    【解决方案2】:

    您的代码进入项目的根目录(或任何子目录)。 vendor 文件夹仅用于 composer 下载的包/库,你不应该更改其中的任何内容。

    要开始一个项目,只需创建一个新文件,例如/my-project/index.php 并需要由 composer 自动创建的 autoload.php

    <?php
        require __DIR__.'/vendor/autoload.php';
    
        // here comes your project code
    

    有关自动加载的更多信息,请参阅官方作曲家文档Basic Usage: Autoloading

    【讨论】:

    • 我有 require_once '../vendor/restler.php';,它加载 autoload.php,然后加载 Restler 和 Illuminate\Database。但我想以这种方式加载我自己的类。
    猜你喜欢
    • 2013-04-18
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2011-10-08
    • 2019-02-27
    • 1970-01-01
    • 2013-03-05
    • 2021-09-09
    相关资源
    最近更新 更多