Symfony 2中的PHP 5.3名称空间

Symfony 2中的PHP 5.3名称空间,php,symfony,namespaces,Php,Symfony,Namespaces,我开始学习symfony2&我正在学习教程。现在,本教程很简单&我能够完全理解它。这是我控制器中的代码 <?php namespace DemoCompany\HelloBundle\Controller; use Symfony\Component\HttpFoundation\Response; class HelloController{ public function indexAction($name){ return new Response('&l

我开始学习symfony2&我正在学习教程。现在,本教程很简单&我能够完全理解它。这是我控制器中的代码

<?php
namespace DemoCompany\HelloBundle\Controller;

use Symfony\Component\HttpFoundation\Response;

class HelloController{
    public function indexAction($name){
        return new Response('<h1>hello ' . ucfirst($name) . '</h1>');
    }
}

1:名称空间充当各种“文件夹”,您可以使用它们封装项目以避免命名冲突。您应该继续阅读关于这个问题的所有PHP文档:。不包括它意味着您正在使用全局名称空间,或
\
,同时使用它告诉PHP文件中的所有内容都属于声明的名称空间,这样
HelloController
的完全限定名变为
DemoCompany\HelloBundle\Controller\HelloController

2:
请求
类实际上是在
使用Symfony\Component\HttpFoundation\Response
时定义的。此声明告诉PHP和Symfony查找该类,可能使用
spl\u register\u autoloader
,并将其包含在当前名称空间中,以便您可以使用短名称
Response
,而不是FQN

4:PHP实际上会查找您调用的每个类/函数,首先在声明的名称空间中搜索,然后向上移动到全局名称空间。您应该认真阅读文档,它在了解这些相对较新的特性(至少对于PHP而言)的同时对我帮助很大

关于#3,我不知道,但我想如果您选择不扩展任何其他基类,您可以选择不扩展任何其他基类。当然,这不会让您的代码继承父类设置的方法,您必须自己实现这些方法。例如,不扩展base
Model
类会使您建立到数据库的连接等


希望这能有所帮助。

我只是简单地使用了Symfony2,以下是我的答案:

1) 这是因为Symfony需要您的控制器存在于
DemoCompany\HelloBundle\Controller
命名空间中,以便自动加载

2) 在
中使用Symfony\Component\HttpFoundation\Response,您告诉PHP如果本地找不到该方法,请查看其中的内容

3) 我不知道那件事


4) 内置PHP函数不在任何特定的名称空间中(名称空间对PHP来说是新的),所以在任何地方都可以工作

Re 4:实际上内置函数在全局名称空间中,所以如果在当前名称空间中找不到函数
func()
,PHP会从全局名称空间中返回
func()
。您可以通过在这些函数前面加上\like
\func()
Re 4:来显式调用这些函数。对于内置对象,您需要反斜杠,例如:new\splfileobject对于Q3,Symfony 2确实提供了一个带有一些有用函数的基本控制器类,但您不必从中扩展。任何课程都可以。强烈建议您一步一步地阅读手册。你所有的问题不仅得到了回答,而且得到了详细的解释。