如何在PHP中使用命名空间

时间:2014-09-18 06:45:10

标签: php oop

我正在开发一个包含不同类的包。假设包名称为Languages,类别为EnglishFrench等。

现在,如果我声明一个像

这样的类
namespace Language;
class English
{}

命名空间如何帮助打包整个东西,并让类的用户在他的调用者文件中调用Package Name?

4 个答案:

答案 0 :(得分:1)

在PHP中,您可以在实例化对象时包含带有类名的命名空间:

$language = new \Language\English();

或者您可以使用“use”关键字import使用该课程:

use \Language\English;
$language = new English();

所有这些都记录得很清楚here

答案 1 :(得分:0)

命名空间为特定标识符提供了一定级别的方向,从而可以区分具有相同名称的标识符。

[PHP Manual][1]

上给出的简单示例

作为一个具体示例,文件foo.txt可以存在于目录/home/greg/home/other中,但foo.txt的两个副本不能共存于同一目录中。此外,要访问foo.txt g目录之外的/home/gre文件,我们必须使用目录分隔符将目录名称添加到文件名中以获取/home/greg/foo.txt

然后,可以通过调用者文件中的Language/English为您的代码访问该类。这会将其与任何其他类English区分开来。

答案 2 :(得分:0)

命名空间有助于在逻辑上和单独的文件和文件夹中分离代码。

EnglishFrench类的客户端可能如下所示:

<?php

use Language\English;
use Language\French;

class Speaking
{
    public function greetInEnglish()
    {
        $english = new English();
        $english->sayHello();
    }

    public function greetInFrench()
    {
        $french = new French();
        $french->sayHello();
    }
}

要打包代码,您应该使用包管理器。最好的php包管理器是作曲家http://getcomposer.org

大多数作曲家包使用名称空间和自动加载器,查看github上某些包的来源以了解它。编写作曲家包是模块化代码并分发代码的好方法。

希望有所帮助!

答案 3 :(得分:0)

我们将使用命名空间定义一个常量函数:

namespace Language;
class English
{
  public function Testclass(){
    return __METHOD__;
  }
}

$lang = __NAMESPACE__.'\\Testclass'
$obj = new $lang;
echo $obj->Testclass();