1: пространства имен действуют как «папки», с помощью которых вы можете инкапсулировать элементы, чтобы избежать коллизий имен.Вам следует прочитать всю документацию PHP по этому вопросу: Обзор пространств имен .Это не означает, что вы используете глобальное пространство имен или \
, а при его использовании PHP сообщает, что все в файле принадлежит объявленному пространству имен, так что полное имя для HelloController
становится DemoCompany\HelloBundle\Controller\HelloController
2: класс Request
был фактически определен, когда вы use Symfony\Component\HttpFoundation\Response
.Это объявление говорит PHP и Symfony искать этот класс, возможно, используя spl_register_autoloader
, и включать его в текущее пространство имен, чтобы вы могли использовать короткое имя Response
вместо FQN.
4:PHP фактически выполняет поиск всех классов / функций, которые вы вызываете, сначала ищет в объявленном пространстве имен, а затем перемещается в глобальное пространство имен.Вы должны действительно прочитать документацию, она мне очень помогла, узнав об этих относительно новых функциях (по крайней мере, для PHP)
В # 3, я понятия не имею, но я полагаю, что вы можете нерасширить любой другой базовый класс, если вы решите это сделать.Конечно, это не позволит вашему коду наследовать методы, установленные родительскими классами, и вам придется реализовать их самостоятельно.Например, если вы не расширили базовый класс Model
, вы бы установили соединение с базой данных, и все такое.
Надеюсь, это поможет.