2013-10-27 4 views
0

Я работаю над библиотекой, и у меня есть «другие» библиотеки, которые она использует, которые входят в состав композитора. Таким образом, в одном из своих библиотек, мне нужно использовать Buzz поэтому у меня естьWeird PHP namespace issue

<?php 

namespace mynamespace; 

use Buzz\Browser, 
    Buzz\Client\Client; 

class Stuff 
{ 
    public function stuff() 
    { 
     $stuff = new Browser(new Curl()); 
    } 
} 

Buzz является https://github.com/kriswallsmith/Buzz

Но я получаю сообщение об ошибке

Class 'mynamespace\Curl' not found 

Теперь я, кажется, не понять, почему new Browser(new Curl()); не ссылается на Buzz\Browser. Если я изменю его на новый \Buzz\Browser(new Buzz\Client\Client());, он отлично работает. Я проверил композитора, все хорошо и в том числе.

ответ

1

Теперь я, кажется, не понять, почему новый браузер (новый Curl()); не ссылается на Buzz \ Browser

Это. Класс Curl не определен в вашем пространстве имен, вам понадобится другой оператор use для импорта Buzz\Client\Curl.

<?php 
namespace mynamespace; 

use Buzz\Browser, 
    Buzz\Client\Curl; 

class Stuff 
{ 
    public function stuff() 
    { 
     $stuff = new Browser(new Curl()); 
    } 
} 

Или если Curl класс в корневом пространстве имен вы можете поставить перед ним обратную косую черту и удалить оператор импорта.

<?php 
namespace mynamespace; 

use Buzz\Browser; 

class Stuff 
{ 
    public function stuff() 
    { 
     $stuff = new Browser(new \Curl()); 
    } 
} 
+0

lol + _ + это то, что я получаю для кодирования в выходные дни, мой мозг, по-видимому, мертв. Благодаря! – Steven

0

В сообщении не говорится, что он не может найти Buzz \ Browser. Он действительно находит это. В сообщении говорится, что он не может найти mynamespace \ Curl - это потому, что Curl находится в пространстве имен верхнего уровня, а не в mynamespace.

Решение:

  • либо добавить use Curl; в список использования, или
  • использовать обратную косую черту при инстанцировании: new \Curl()

HTH