PHP中的命名空间是什么?

时间:2012-10-01 19:07:36

标签: php namespaces

我在PHP中阅读了一篇关于namespaces的文章。但是我不知道它们用于什么?

<?php
namespace MyProject {
    // Regular PHP code goes here, anything goes!
    function run()
    {
        echo 'Running from a namespace!';
    }
}

我也阅读了关于它的PHP.net手册,但是并没有完全理解它。

4 个答案:

答案 0 :(得分:2)

我也遇到了困难,只是把它想象成一种帮助编译器解析名称的方法。 所以没有歧义。

您可以让两个开发人员编写完全不同的类但具有相同的类型标识符。 类名可以是相同的。在命名空间中分组有助于编译器/解释器消除歧义。

所以namespace Developer1.CoolClassnamespace Developer2.CoolClass

完全不同

答案 1 :(得分:1)

在PHP世界中,命名空间旨在解决库和应用程序的作者在创建可重用的代码元素(如类或函数)时遇到的两个问题:

您创建的代码与内部PHP类/函数/常量或第三方类/函数/常量之间的名称冲突。     能够别名(或缩短)Extra_Long_Names,旨在缓解第一个问题,提高源代码的可读性。

PHP命名空间提供了一种对相关类,接口,函数和常量进行分组的方法。

Check Here for details

enter image description here

命名空间是一种在包中对相关类进行分组的方法。您可以将名称空间视为保存文件的文件夹,其方式是两个文件具有相同名称但不同(或相同)的文件,没有任何歧义。< / p>

<强> file1.php

<?php
namespace Foo\Bar\subnamespace;

const FOO = 1;
function foo() {}
class foo
{
    static function staticmethod() {}
}
?>

<强> file2.php

<?php
namespace Foo\Bar;
include 'file1.php';

const FOO = 2;
function foo() {}
class foo
{
    static function staticmethod() {}
}

/* Unqualified name */
foo(); // resolves to function Foo\Bar\foo
foo::staticmethod(); // resolves to class Foo\Bar\foo, method staticmethod
echo FOO; // resolves to constant Foo\Bar\FOO

/* Qualified name */
subnamespace\foo(); // resolves to function Foo\Bar\subnamespace\foo
subnamespace\foo::staticmethod(); // resolves to class Foo\Bar\subnamespace\foo,
                                  // method staticmethod
echo subnamespace\FOO; // resolves to constant Foo\Bar\subnamespace\FOO

/* Fully qualified name */
\Foo\Bar\foo(); // resolves to function Foo\Bar\foo
\Foo\Bar\foo::staticmethod(); // resolves to class Foo\Bar\foo, method staticmethod
echo \Foo\Bar\FOO; // resolves to constant Foo\Bar\FOO
?>

答案 2 :(得分:0)

命名空间用于隔离函数和类声明,以使库和“帮助器”(包含函数的文件)更具可移植性。通过在名称空间中放置一个库,可以减少类名与可能想要使用您的库的作者可能想要调用其类的内容相冲突的可能性。例如,如果他们'可以有多个名为“user”的类在单独的命名空间中。

答案 3 :(得分:0)

考虑自己编写自己的类,我们称之为Foo。其他人也写了项目的一部分,他也称他的一个班级Foo

命名空间解决了这个问题。

示例:

Namespace MyClasses;

Class Foo
{
}


NameSpace HisClasses;

Class Foo
{
}

$myfoo = new MyClasses\Foo();
$hisfoo = new HisClasses\Foo();