PHP中的命名空间相关概念浅析

1. PHP中的命名空间是什么?

什么是命名空间?“从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。”——命名空间概述

2. PHP命名空间该如何理解?

从本质上讲,命名空间就是一个容器,这个容器内我们可以放入类、函数和变量,他们在同一命名空间内可以无条件相互访问。在命名空间之外,就必须引用或者导入其他命名空间,才能调用它们包含的这些项。

命名空间跟shell中的文件目录的概念是一样一样的。在当前目录下可以直接用文件名访问所有文件,如果需要访问其他目录下的文件,就需要输入相对路径或绝对路径。

引用方式:

复制代码 代码如下:

namespace foo;
 class Foo {  
         public function foo()  
             {       
                  return \top\namespace\bar\Bar::fuck();   
              }
             }

导入方式:
复制代码 代码如下:

namespace foo;
use top\namespace\bar\Bar;
 class Foo {
        public function foo()
            {        return Bar::fuck(); 
            }
           }

导入就相当于将目的类复制一份到当前命名空间中。

3. PHP命名空间有何实际应用?

命名空间的存在是为了解决下面两个问题:

1). 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。

2). 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

4. 一些tips

1. 同一个空间下的类直接相互直接调用,属于一家。例如 Laravel 中的 PageController 类中可以直接写 Page::all() 这样的代码来调用 Page 这个model,因为他们俩都在顶级命名空间下。

2. 若一个类存在于非顶级命名空间中,那么它只能在调用同样是当前命名空间下的其他类才不用“引用”或“导入”,它们属于一家。任何子命名空间都是另一个命名空间,另一个容器,没有除了容器之间关系之外的任何特殊关系。

3. Laravel 采用 classmap 方式进行自动加载(autoload),PHP虽然有了命名空间这个高级特性,但是这只是逻辑关系,require 文件还是要有的。这个类和文件的对应关系就存在 /vendor/composer/autoload_classmap.php ,每次 composer dump-autoload 都会重新编译、生成。

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
PHP 的Hash算法是比较常用的,现在的MD5有时候不太安全,就得用到Hash_algos()中的其它算法,下面进行了一个性能的比较。 php代码: define('testtime', 50000);$algos = hash_algos();foreach($algos as $algo) {$st = microtime();for($i = 0; $i testtime; $i++) {hash($algo, microtime().$i);}$et = microtime();list($ss
最近,在项目中要用到分页。分页功能是经常使用的一个功能,所以,对其以函数形式进行了封装。 // 分页分装/*** $pageType 分页类型 1是数字分页 2是文本分页* 可以将$pageTotal,$page,$total等数据作为参数传递,或者在paging作为全局变量(推荐)*/function paging($pageType){global $pageTotal,$page,$total;if($pageType == 1){echo 'div id="pagenum"';echo'ul';f
下载地址:http://localize.drupal.org/translate/downloads,下载最新的Drupal6中文汉化包文件 到 admin-site building-modules [admin/build/modules] 启用 Locale 模块。 到 admin-site configuration-language [admin/settings/language] 点击页面介绍内的“import page”,进入语言包导入页面[admin/build/translate/i
本文实例讲述了php通过Chianz.com获取IP地址与地区的方法。分享给大家供大家参考。具体分析如下: 一个IP获取的结果不是很完善,究其原因是因为ip138的IP解析应对国外的地址时不是很详细,所以又重新写了个用Chianz.com的代码,实例代码如下: 复制代码 代码如下: !DOCTYPE html html lang="en" head title/title meta charset="UTF-8" / meta name="author" content="" / meta name="k

php实现的漂亮分页方法 - 2015-05-07 06:05:50

分页页码显示算法 复制代码 代码如下: /** * 获取分页的HTML内容 * @param integer $page 当前页 * @param integer $pages 总页数 * @param string $url 跳转url地址 最后的页数以 'page=x' 追加在url后面 * * @return string HTML内容; */ public static function getPageHtml($page, $pages, $url){ //最多显示多少个页码 $_pageNum
本文实例讲述了CodeIgniter删除和设置Cookie的方法。分享给大家供大家参考。具体如下: $cookie = array( 'name' = 'loggedin', 'value' = 'yes', 'expire' = '86500', 'domain' = '.apol0829.dev', 'prefix' = 'apollidon_' );set_cookie($cookie); $cookie = array( 'name' = 'loggedin', 'value' = '', 'ex

解析strtr函数的效率问题 - 2015-05-07 06:05:37

最近经常要对字符串进行匹配和替换操作,之前一般使用str_replace或者preg_replace,据说strtr的效率不错,所以对比了一下: 复制代码 代码如下: $i = 0; $t = microtime(true); for(;$i1000;$i++) { $str = strtr(md5($i), $p2); } var_dump(microtime(true)-$t); //0.085476875305176 $t = microtime(true); for(;$i2000;$i++) {
网上查了下,有很多的方法 1、md5(time() . mt_rand(1,1000000)); 这种方法有一定的概率会出现重复 2、php内置函数uniqid() uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID. w3school参考手册有一句话:"由于基于系统时间,通过该函数生成的 ID 不是最佳的。如需生成绝对唯一的 ID,请使用 md5() 函数"。 下面方法返回结果类似:5DDB650F-4389-F4A9-A100-501EF1348872 复制代码 代码如下: funct

CentOS安装php v8js教程 - 2015-05-07 06:05:37

CentOS release 5.11 (Final),CentOS release 6.6 (Final) x64测试通过。 gcc版本,glibc版本,libstdc++.so.6版本,gnu-binutils版本,tar版本,python版本,re2c版本都要对的上才行,最后弄上已经要吐血的,需要glibc高版本的话是搞不了的,硬要搞的话风险太大。 v8js目前最新版0.1.5beta,在CentOS5上是搞不了的,各种版本依赖没法弄,所以都用旧版本。 版本: 复制代码 代码如下: gcc-4.4.

php二分查找二种实现示例 - 2015-05-07 06:05:37

php二分查找示例 二分查找常用写法有递归和非递归,在寻找中值的时候,可以用插值法代替求中值法。 当有序数组中的数据均匀递增时,采用插值方法可以将算法复杂度从中值法的lgN减小到lglgN 复制代码 代码如下: /** * 二分查找递归解法 * @param type $subject * @param type $start * @param type $end * @param type $key * @return boolean */ function binarySearch_r($subjec