您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

PHP 5.3中的命名空间:你用过了么?_PHP教程

2024/6/23 11:45:08发布30次查看
【php100精选译文】命名空间是php 5.3中最重要的变化,对于c#和java开发人员对这个词语非常熟悉了,他们终于可以更好地改变php应用程序的结构了。
为什么我们需要命名空间?
随着你的php代码库的增长,对之前定义的函数和类名进行修改时风险也更高了,当你试图增加第三方组件或插件时问题更严重,如果存在两个或两个以上的代码集实现了一个“database”和“user”类会怎么样?
直到目前,唯一的解决办法是使用长的类/函数名,例如wordpress在每个类和函数名前都使用了前缀“wp_”, zend framework使用了极具描述性的命名约定,导致类名非常冗长,如:
zend_search_lucene_analysis_analyzer_common_text_caseinsensitive
命名冲突问题可以使用命名空间来解决,php常量、类和函数可以被组合到命名空间库中。
如何定义命名空间?
默认情况下,所有常量、类和函数名都放在全局空间下,就和php支持命名空间之前一样。
在php文件的顶部使用一个关键字namespace就可以定义命名空间,它必须是第一个命令(declare除外),在它前面不能出现非php代码、html或空格。如:
// define this code in the 'myproject' namespace  namespace myproject;   // ... code ...  
这一行下面的代码都是指定给myproject命名空间的,为相同代码块嵌套命名空间或定义多个命名空间是不可能的,如果你真这样干,只有最后一个命名空间才能识别,但你可以在同一个文件中定义不同的命名空间代码,如:
namespace myproject1;  // php code for the myproject1 namespace   namespace myproject2;  // php code for the myproject2 namespace   // alternative syntax  namespace myproject3 {   // php code for the myproject3 namespace  }  ?>  
尽管这么干是可以的,但我建议你不要这么做,最好还是每个文件中只定义一个命名空间,免得把你弄糊涂了。
子命名空间
php允许定义具有层次的命名空间以便库能够细分,子命名空间使用一个反斜线字符()分隔,如:
◆myprojectsubname
◆myprojectdatabasemysql
◆companynamemyprojectlibrarycommonwidget1
调用命名空间代码
在lib1.php文件中我们使用applib1 namespace命名空间定义了一个常量、一个函数和一个类,如:
lib1.php
 ?php  // application library 1  namespace applib1;   const myconst = 'applib1myconst';   function myfunction() {   return __function__;  }   class myclass {   static function whoami() {    return __method__;   }  }  ?> 
现在我们可以在另一个php文件包括这段代码,如:
myapp.php
 ?php  header('content-type: text/plain');  require_once('lib1.php');   echo applib1myconst . n;  echo applib1myfunction() . n;  echo applib1myclass::whoami() . n;  ?> 
在myapp.php中并没有定义命名空间,因此这段代码存在全局空间中,任何对myconst、myfunction和myclass的直接引用都会失败,因为它们存在于applib1命名空间中,为了调用lib1.php中的代码,我们可以在applib1命名空间前添加前缀定义一个完全合格的名称,下面是我载入myapp.php时的输出结果:
applib1myconst    applib1myfunction    applib1myclass::whoami 
完全合格名称可以变得很长,定义长名称,如app-lib1-myclass,有一些明显的好处。
原文:how to use php namespaces, part 1: the basics
作者:craig buckler
http://www.bkjia.com/phpjc/446608.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/446608.htmltecharticle【php100精选译文】命名空间是php 5.3中最重要的变化,对于c#和java开发人员对这个词语非常熟悉了,他们终于可以更好地改变php应用程序的结...
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product