淘先锋技术网

首页 1 2 3 4 5 6 7

PHP Namespace 作用

PHP Namespace 是 PHP 5.3 及以上版本的一个特性,它是为避免不同的代码之间同名函数、类、常量等发生冲突而产生的一个解决方案。通过使用 PHP Namespace,可以将应用程序中的不同部分进行分组,从而避免了不同部分之间名称的冲突。

举例说明,简单来讲 Namespace 就如同房屋中的房间一样,每一个房间中可以做不同的事情,不同的事情也就对应不同的实体对象。比如说,我们写了一个名字叫做“Person”的类,在一个大型项目中,其他程序员会因为不知道你写了一个同名类而建立同名类。其实这就是Namespace要解决的问题,我们可以自己定一个 Namespace,比如说“MyProject”,这样就构成了类名“MyProject/Person”,从而避免了与其他程序员编写的类发生冲突。

//定义Namespace
namespace MyProject;
//定义类
class Person{
//定义类的方法
public function sayHello(){
echo "Hello there!";
}
}
//使用类
$person = new MyProject\Person();
$person->sayHello();

如上述代码,首先定义了一个 Myproject 的 Namespace,再在此 Namespace 下定义一个 Person 类,再通过实例化来调用此方法。

可以用花括号封装多层Namespace,例如定义一个\MyProject\Admin\User类时

namespace MyProject{
namespace Admin{
class User{}
}
}

这样可以通过引用此类

PHP Namespace 最为普及的使用场景是在 Composer 以及 Laravel 应用开发中,通过使用 Composer 我们可以轻易地将其他开发者的代码集成到我们自己的应用程序中,同时又可以将我们的代码供其他开发者使用,Composer 可以自动解决依赖关系,并确保不会由于合并两个不同的 Library 引起冲突。

在 Laravel 中,所有的内置核心代码都在 Illuminate Namespace 下,而使用文件的正0理可以使我们很轻松地访问代码。比如说Laravel中的 Illuminate\Console 是一个 Namespace,访问其中的 Command 类,则可以用 Illuminate\Console\Command 访问。

namespace Illuminate\Console;
use Illuminate\Console\Command;
class MyCommand extends Command{
protected $signature = 'my:command';
public function handle(){
$this->info('My command!');
}
}

以上代码中,我们定义了一个 MyCommand 类,它继承自 Illuminate\Console\Command,然后定义了一个 handle 方法,并输出了内容“My command”。

综上所述,PHP Namespace 为我们提供了模块化编程解决方案,避免了各模块之间命名冲突的问题。在实际项目中不仅可以通过 Composer 整合第三方代码,同时还可以便于分解代码、重构、管理等操作。