У меня небольшие проблемы с пространствами имен и с заявлениями 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
утверждения, я получаю:
Неустранимая ошибка: Class 'Shape \ Shape' не найдена в /Users/shawn/Documents/work/sites/workspace/shape/Circle.php в строке 8
Может кто-нибудь, пожалуйста, дайте мне небольшое руководство по этому вопросу?
Оператор use
– это присвоение псевдонимов именам классов, интерфейсов или другим пространствам имен. Большинство операторов use
ссылаются на пространство имен или класс, которые вы хотели бы сократить:
use My\Full\Namespace;
эквивалентно:
use My\Full\Namespace as Namespace; // Namespace\Foo is now shorthand for My\Full\Namespace\Foo
Если оператор использования используется с именем класса или интерфейса, он имеет следующие функции:
// 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
ключевых слов.
В namespace foo\bar;
file1.php namespace foo\bar;
В файле2.php $obj = new foo\bar\myObj();
Еще немного больше этой истории – ключевое слово use
.
Если вы говорите в file2, use foo\bar as mypath
это означает, что вам нужно использовать mypath
вместо foo\bar
любом месте файла. '
$obj = new mypath\myObj();
Если вы сказали, что use foo\bar
он равен use foo\bar as bar