我应该在哪里编写代码,以便Composer可以自动加载我的PHP类


Where should I write my code so that Composer can autoload my PHP classes?

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

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

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

在项目目录的根目录中创建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类呢?

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

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

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

有关自动加载的更多信息,请参阅"基本用法:自动加载"中的官方composer文档