У меня небольшие проблемы с пространствами имен и с заявлениями 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