Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我是否需要在Symfony2中使用名称空间?_Php_Namespaces_Symfony - Fatal编程技术网

Php 我是否需要在Symfony2中使用名称空间?

Php 我是否需要在Symfony2中使用名称空间?,php,namespaces,symfony,Php,Namespaces,Symfony,我刚刚开始学习Symfony2(在过去2年使用1.x之后),我有点推迟了,因为需要更多的打字。我知道这听起来很懒,但我喜欢这样一个事实:我可以在1.x中快速启动并运行一些东西,而只需输入更少的内容。我想知道是否有可能在不使用名称空间的情况下自动加载类。我所有这样做的尝试(使用PEAR命名方案)都失败了 如果我遗漏了一些明显的东西,并且会因为避免使用名称空间而对自己造成伤害,我将非常感谢您的建议:) 针对@KingCrunch: 我希望避免使用名称空间和使用声明,这些声明在Symfony2中似乎非

我刚刚开始学习Symfony2(在过去2年使用1.x之后),我有点推迟了,因为需要更多的打字。我知道这听起来很懒,但我喜欢这样一个事实:我可以在1.x中快速启动并运行一些东西,而只需输入更少的内容。我想知道是否有可能在不使用名称空间的情况下自动加载类。我所有这样做的尝试(使用PEAR命名方案)都失败了

如果我遗漏了一些明显的东西,并且会因为避免使用名称空间而对自己造成伤害,我将非常感谢您的建议:)

针对@KingCrunch:
我希望避免使用
名称空间
使用
声明,这些声明在Symfony2中似乎非常频繁,只是为了加快我的编码速度。老实说,我以前从未在PHP中使用过名称空间。我从纸面上理解它们的好处(我习惯于使用其他语言的软件包),但我从未遇到过在Symfony 1.x项目中不使用它们的问题。这就是为什么我在上面说“如果我遗漏了什么……”

简短回答:是的,如果要使用Symfony2,名称空间是必须的

这背后的原因是sf2类自动加载程序是基于命名空间使用情况构建的。理论上,您可以编写自己的自动加载器并将其包装在sf2中,但我认为这比使用
名称空间
使用
;)更麻烦


起初我也被它弄得很沮丧,不喜欢它的使用方式。但一旦我习惯了,并开始看到它的好处,它的另一种方式。我在自己的项目中使用sf2,在工作中必须使用sf1.4(希望不会太久),每次我从sf2切换到sf1.4时,我都会有一种“哦,又不是这样”的感觉。

你必须意识到,名称空间不需要你输入比梨式名称更多的东西。实际上他们可以保存一些字符

请看这两个例子:

梨式:

class Foo_Bar_Baz extends Foo_Bar_Parent
{
    public function __construct()
    {
        $obj = new Some_Long_Class_Name;
        $obj2 = new Some_Long_Class_Name;
    }
}
使用名称空间/使用:

namespace Foo\Bar;

use Some\Long\Class\Name;

class Baz extends Class
{
    public function __construct()
    {
        $obj = new Name;
        $obj2 = new Name;
    }
}
使用名称空间,但不使用:

namespace Foo\Bar;

class Baz extends \Foo\Bar\Class
{
    public function __construct()
    {
        $obj = new \Some\Long\Class\Name;
        $obj2 = new \Some\Long\Class\Name;
    }
}
如您所见,如果每次都使用完全限定的类名(上一个示例),则每个类名只需多加一个字符,即前面的
\
。如果使用use语句和all,那么在一个文件中重复使用相同类名的次数越多,或者在同一名称空间中使用的类越多,它就会越短


TL;DR:不管怎样,如果你很懒,那就找一个像PhpStorm这样的IDE,它会自动完成所有这些,并为你添加使用语句。

NS非常复杂,你甚至会在试图向别人解释其好处时出错:

我知道答案的目的不是为了让代码“完美”,但仍然……您忘了包含“类”类的use语句:


这就是名称空间可怕的原因——只需要忘记1就可以抛出错误;而且,即使整个项目中只有一个名为“class”的类,PHP也不知道它在那里。

只是好奇:为什么要使用Symfony2和Symfony1样式?名称空间是一种特性,主要是为了解决虚构的问题(名称冲突),主要是为了框架作者的利益。您可以避免使用名称空间类,甚至在自定义自动加载程序中也可能避免使用它们(您需要FQN到唯一类名的映射)。但最好不要与之抗争。如果要使用SF2,不建议避免常规命名空间开销。使用模板或编辑器快捷方式。@mario有趣。。。我只是因为需要为每个控制器中的每个域对象声明“使用”而感到沮丧。谢谢,您使用PEAR命名方案进行的比较让我明白了这一点。名称空间我来了!
namespace Foo\Bar;

use Some\Long\Class\Name;
use The\Extended\Class;
...