Пространства имен PHP и "использование"

У меня есть небольшие проблемы с пространствами имен и use заявления.

У меня есть три файла: ShapeInterface.php, Shape.php а также Circle.php,

Я пытаюсь сделать это, используя относительные пути, поэтому я поместил это во все классы:

namespace Shape; 

В моем классе у меня есть следующее:

namespace Shape;
//use Shape;
//use ShapeInterface;

include 'Shape.php';
include 'ShapeInterface.php';    

class Circle extends Shape implements ShapeInterface{ ....

Если я использую include Заявления я не получаю ошибок. Если я попробую use заявления я получаю:

Неустранимая ошибка: класс 'Shape\Shape' не найден в /Users/shawn/Documents/work/sites/workspace/shape/Circle.php в строке 8

Может ли кто-нибудь дать мне небольшое руководство по этому вопросу?

2 ответа

Решение

use Оператор предназначен для присвоения псевдонимов именам классов, интерфейсов или других пространств имен. Наиболее use операторы относятся к пространству имен или классу, который вы хотите сократить:

use My\Full\Namespace;

эквивалентно:

use My\Full\Namespace as Namespace;
// Namespace\Foo is now shorthand for My\Full\Namespace\Foo

Если use Оператор используется с именем класса или интерфейса, он имеет следующие применения:

// after this, "new DifferentName();" would instantiate a My\Full\Classname
use My\Full\Classname as DifferentName;

// global class - making "new ArrayObject()" and "new \ArrayObject()" equivalent
use ArrayObject;

use Оператор не следует путать с автозагрузкой. Класс загружается автоматически (отрицая необходимость include) путем регистрации автозагрузчика (например, с spl_autoload_register). Возможно, вы захотите прочитать PSR-4, чтобы увидеть подходящую реализацию автозагрузчика.

Если вам нужно упорядочить код в пространствах имен, просто используйте ключевое слово namespace:

file1.php

namespace foo\bar;

В file2.php

$obj = new \foo\bar\myObj();

Вы также можете использовать use, Если в file2 ставишь

use foo\bar as mypath;

вам нужно использовать mypath вместо bar в любом месте файла:

$obj  = new mypath\myObj();

С помощью use foo\bar; равно use foo\bar as bar;,

Другие вопросы по тегам