2014-05-26 4 views
0

каталог:автозагрузку класс карта с композитором автозагрузку

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 
{ 

} 

это работает, но я хочу объявить не используя 'использование MyProjext \ Foo \ Foo;' или 'расширяет MyProjext \ Foo \ Foo'

class Bar extends Foo 
{ 

} 

это ошибка: 'класс Foo не найден', кто-то может мне помочь?

+0

А что такое пространство имен класса «Бар»? – sectus

+0

Класс Bar не имеет пространства имен, похоже в laravel, класс BaseController расширяет контроллер, класс BaseController не имеет пространства имен, класс. Имя пространства имен контроллера Illuminate \ Routing \ Controller – user3672775

+0

Показать объявление класса, начинающееся с ' sectus

ответ

1

Вы сказали:

it working, but i want declare not using 'use MyProjext\Foo\Foo;' or 'extends MyProjext\Foo\Foo'

Это означает, что это работает:

use MyProject\Foo\Foo; 

class Bar extends Foo 
{ 

} 

Но это не работает (вы хотите, чтобы он работал):

class Bar extends Foo 
{ 

} 

Это не потому что класс Bar пытается расширить класс Foo от глобальных но класс Foo объявлен под MyProject\Foonamespace и хранится в каталоге MyProject/Foo, поэтому ошибка происходит, и это логично.

Если вы хотите использовать этот код (без какого-либо namespace):

class Bar extends Foo 
{ 

} 

Затем убедитесь, что класс Foo находится в наличии в глобальном пространстве имен и найти строку namespace MyProject\Foo; до вашего Foo объявления класса и удалите эту строку, а также включите класс Foo, прежде чем использовать его (путем расширения), чтобы создать класс Bar. Таким образом, это может выглядеть следующим образом:

// You may need to adjust the path 
require_once("MyProject/Foo/Foo.php"); 

class Bar extends Foo 
{ 

} 

Использование namespace лучше, поэтому постарайтесь придерживаться его, без namespace текущей autoloading техники может потерпеть неудачу, если вы не переписать его без использования namespace.

Смежные вопросы