我正在开发一个包含不同类的包。假设包名称为Languages
,类别为English
,French
等。
现在,如果我声明一个像
这样的类namespace Language;
class English
{}
命名空间如何帮助打包整个东西,并让类的用户在他的调用者文件中调用Package Name?
答案 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)
命名空间有助于在逻辑上和单独的文件和文件夹中分离代码。
English
和French
类的客户端可能如下所示:
<?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();