我是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文档