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

Posted

技术标签:

【中文标题】我应该在哪里编写代码以便 Composer 可以自动加载我的 PHP 类?【英文标题】:Where should I write my code so that Composer can autoload my PHP classes? 【发布时间】: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。

【问题讨论】:

【参考方案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。但我想以这种方式加载我自己的类。

以上是关于我应该在哪里编写代码以便 Composer 可以自动加载我的 PHP 类?的主要内容,如果未能解决你的问题,请参考以下文章

我应该在哪里为 socket.io 编写客户端代码?

我应该将图像存储在哪里,以便可以与它们共享 iTunes 文件?

我们在哪里可以为 MainMenu.xib 编写 windowDidBecomeKey 方法

在 AngularJS 中使用数据库 - 我应该在哪里编写数据库连接代码?

我应该在哪里编写 angularjs 中的 cors 过滤器启用代码

我应该将敏感文件放在哪里,以便 PHP 脚本可以读取它们?