使用composer autoload自动加载类映射


autoload class map with composer autoload

目录:

myproject:
   src:
      MyProject:
           Foo:
              Foo.php

在文件autoload_namespaces.php 中

return array(
    'MyProject' => array($vendorDir . '/myproject/src'),
);

如果声明如下:

class Bar extends MyProjext'Foo'Foo
{
}

或:

use MyProjext'Foo'Foo;
class Bar extends Foo
{
}

它起作用了,但我想声明不使用"use MyProjext''Foo''Foo;"或"扩展MyProjext''Foo''Foo">

class Bar extends Foo
{
}

这是一个错误:"找不到Foo类",有人能帮我吗?

你说:

它起作用了,但我想声明不使用"use MyProjext''Foo''Foo;"或"扩展MyProjext''Foo''Foo">

这意味着这是有效的:

use MyProject'Foo'Foo;
class Bar extends Foo
{
}

但这不起作用(你想让它起作用(:

class Bar extends Foo
{
}

它不起作用,因为类Bar正试图从全局范围扩展类Foo,但类Foo是在MyProject'Foo命名空间下声明的,并且它存储在MyProject/Foo目录中,所以错误正在发生,这是合乎逻辑的。

如果你想使用这个代码(没有任何namespace(:

class Bar extends Foo
{
}

然后确保类Foo在全局命名空间中可用,并在Foo类声明之前找到一行类似namespace MyProject'Foo;的行,删除该行,还包括类Foo,然后使用它(通过扩展(创建类Bar。所以,它可能看起来像这样:

// You may need to adjust the path
require_once("MyProject/Foo/Foo.php");
class Bar extends Foo
{
}

使用namespace更好,所以尽量坚持使用它,如果没有namespace,除非你在不使用namespace的情况下重写它,否则你当前的autoloading技术可能会失败。