Проблема с пространством имен в PHP - PullRequest
0 голосов
/ 26 августа 2011

У меня есть файл, который в начале объявляет пространство имен, затем включает два вспомогательных файла, которые определяют классы, такие как X, Y и т. Д.

Теперь в основном файле, после объявления пространства имен, я больше не могу создавать классы, расширяющие X. Я не объявил пространство имен в X или Y, я принял определение в верхней части основного файла, до включения , позаботится об этом? Разве класс не должен по умолчанию разрешать мое пространство имен \ X?

Например, в моем PHP-файле я делаю это в начале:

namespace SGOAuth;
include 'OAuth.php';
include 'CURL.php';

И позже класс, который я определяю в этом файле, пытается:

class MyClass extends CURL {...}

Но я получаю ошибку: SGOAuth \ CURL не найден

Спасибо!

1 Ответ

1 голос
/ 26 августа 2011

Если класс CURL не объявлен в пространстве имен SGOAuth, конечно, он не будет существовать в пространстве имен SGOAuth.Простое включение файла не означает, что он является частью пространства имен, в котором находится файл, в который входит файл (теперь это предложение;)).Это сделало бы пространства имен бессмысленными.

CURL.php

// no namespace declaration, defaults to global namespace
class CURL { }

foo.php

// namespace declaration, all code *in this file* is in namespace Foo
namespace Foo;

// includes the CURL class, which is in the global namespace
include 'CURL.php';

new CURL;  // error, class does not exist in this namespace
new \CURL; // works

Так что class CURL по умолчанию находится в глобальном пространстве имен.Чтобы продлить его, вам нужно extends \CURL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...