PHP 命名空间

1、前言php

对于不少的PHP小白来讲,命名空间是什么,为何要声明命名空间呢? 框架

他们老是感到困惑!如下是本人的理解,望对童鞋们有所帮助。yii

 

2、介绍函数

命名空间是一个函数或者一个类的惟一标识。在流行的框架Lavaral,ThinkPHP,Yii等框架中,特别是结构复杂的文件层次和海量的代码中,相同的类名和函数名就容易使咱们的程序抛出异常。因而,咱们引进了命名空间的概念。ui

结构以下:spa

1 <?php 2 namespace yii\rest; 3 
4 use yii\rest\Controller; 5 
6 class ActiveController extends Controller 7 { 8  // ......
9 }

很显然咱们能够看出, 命名空间的命名是 以咱们项目的顶级目录为开始以路径的形式命名的。rest

引入咱们的命名空间是 use 短语句,另外也能够 直接以 1 \yii\rest\Controller 的形式使用。code

除了咱们所说的避免海量代码出现重复,从而抛出异常的优势, 命名空间还能够配合魔术常量 __dir__ 和函数 dirname() 使用,来拼接咱们的函数或类文件的绝对路径。blog

在不少框架的底层咱们常常能够看到 spl_autoload_register() 这个函数配合命名空间来加载类文件实现咱们的代码逻辑。此函数是魔术方法__autoload()的实现。io

下面给出例子:

 1 <?php  2 
 3 // function __autoload($class) {  4 // require_once 'dirname(__dir__)' . "/{$class}.php";  5 // }
 6 
 7 function my_autoloader($class) {  8      require_once 'dirname(__dir__)' .   "/{$class}.php";  9 } 10 
11 spl_autoload_register('my_autoloader'); 12 
13 // 或者,自 PHP 5.3.0 起能够使用一个匿名函数
14 spl_autoload_register(function ($class) { 15     require_once 'dirname(__dir__)' .   "/{$class}.php"; 16 });
相关文章
相关标签/搜索