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 整合第三方代码,同时还可以便于分解代码、重构、管理等操作。