我应该在哪里编写代码以便 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 类?的主要内容,如果未能解决你的问题,请参考以下文章
我应该将图像存储在哪里,以便可以与它们共享 iTunes 文件?
我们在哪里可以为 MainMenu.xib 编写 windowDidBecomeKey 方法
在 AngularJS 中使用数据库 - 我应该在哪里编写数据库连接代码?