自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PHP 5.3中的命名空間:你用過了么?

譯文
開發(fā) 后端
日前發(fā)布的PHP 5.3中,最重要的一個新特性就是命名空間的加入。命名空間對于C#和Java開發(fā)者而言都不是新事物了,不過這次出現(xiàn)在PHP當中還是有著相當重要的意義。

【51CTO精選譯文】命名空間是PHP 5.3中最重要的變化,對于C#和Java開發(fā)人員對這個詞語非常熟悉了,他們終于可以更好地改變PHP應(yīng)用程序的結(jié)構(gòu)了。

為什么我們需要命名空間?

隨著你的PHP代碼庫的增長,對之前定義的函數(shù)和類名進行修改時風險也更高了,當你試圖增加第三方組件或插件時問題更嚴重,如果存在兩個或兩個以上的代碼集實現(xiàn)了一個“Database”和“User”類會怎么樣?

直到目前,唯一的解決辦法是使用長的類/函數(shù)名,例如Wordpress在每個類和函數(shù)名前都使用了前綴“WP_”, Zend Framework使用了***描述性的命名約定,導致類名非常冗長,如:

Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive

命名沖突問題可以使用命名空間來解決,PHP常量、類和函數(shù)可以被組合到命名空間庫中。

如何定義命名空間?

默認情況下,所有常量、類和函數(shù)名都放在全局空間下,就和PHP支持命名空間之前一樣。

在PHP文件的頂部使用一個關(guān)鍵字namespace就可以定義命名空間,它必須是***個命令(declare除外),在它前面不能出現(xiàn)非PHP代碼、HTML或空格。如:

  1. < ?php  
  2. // define this code in the 'MyProject' namespace  
  3. namespace MyProject;  
  4.  
  5. // ... code ...  

這一行下面的代碼都是指定給MyProject命名空間的,為相同代碼塊嵌套命名空間或定義多個命名空間是不可能的,如果你真這樣干,只有***一個命名空間才能識別,但你可以在同一個文件中定義不同的命名空間代碼,如:

  1. < ?php  
  2. namespace MyProject1;  
  3. // PHP code for the MyProject1 namespace  
  4.  
  5. namespace MyProject2;  
  6. // PHP code for the MyProject2 namespace  
  7.  
  8. // Alternative syntax  
  9. namespace MyProject3 {  
  10.  // PHP code for the MyProject3 namespace  
  11. }  
  12. ?>  

盡管這么干是可以的,但我建議你不要這么做,***還是每個文件中只定義一個命名空間,免得把你弄糊涂了。

子命名空間

PHP允許定義具有層次的命名空間以便庫能夠細分,子命名空間使用一個反斜線字符(\)分隔,如:

◆MyProject\SubName

◆MyProject\Database\MySQL

◆CompanyName\MyProject\Library\Common\Widget1

調(diào)用命名空間代碼

在lib1.php文件中我們使用App\Lib1 namespace命名空間定義了一個常量、一個函數(shù)和一個類,如:

lib1.php

  1. < ?php  
  2. // application library 1  
  3. namespace App\Lib1;  
  4.  
  5. const MYCONST = 'App\Lib1\MYCONST';  
  6.  
  7. function MyFunction() {  
  8.  return __FUNCTION__;  
  9. }  
  10.  
  11. class MyClass {  
  12.  static function WhoAmI() {  
  13.   return __METHOD__;  
  14.  }  
  15. }  
  16. ?> 

現(xiàn)在我們可以在另一個PHP文件包括這段代碼,如:

myapp.php

  1. < ?php  
  2. header('Content-type: text/plain');  
  3. require_once('lib1.php');  
  4.  
  5. echo \App\Lib1\MYCONST . "\n";  
  6. echo \App\Lib1\MyFunction() . "\n";  
  7. echo \App\Lib1\MyClass::WhoAmI() . "\n";  
  8. ?> 

在myapp.php中并沒有定義命名空間,因此這段代碼存在全局空間中,任何對MYCONST、MyFunction和MyClass的直接引用都會失敗,因為它們存在于App\Lib1命名空間中,為了調(diào)用lib1.php中的代碼,我們可以在\App\Lib1命名空間前添加前綴定義一個完全合格的名稱,下面是我載入myapp.php時的輸出結(jié)果:

  1. App\Lib1\MYCONST    
  2. App\Lib1\MyFunction    
  3. App\Lib1\MyClass::WhoAmI 

完全合格名稱可以變得很長,定義長名稱,如App-Lib1-MyClass,有一些明顯的好處。

原文:How to Use PHP Namespaces, Part 1: The Basics

作者:Craig Buckler

【編輯推薦】

  1. PHP 5.3中的命名空間使用方法淺述
  2. PHP 5.3.0發(fā)布 新增命名空間等多項特性
  3. PHP的命名空間
  4. PHP 5.3閉包語法初探
  5. PHP 5.3新版特性淺析
責任編輯:yangsai 來源: 51CTO.com
相關(guān)推薦

2009-07-17 09:31:06

PHP 5.3命名空間

2023-12-22 16:39:47

Java函數(shù)式接口開發(fā)

2022-05-18 08:00:26

函數(shù)劫持JavaScript鉤子函數(shù)

2021-02-22 09:10:10

數(shù)字人民幣DCEP區(qū)塊鏈

2020-08-23 09:18:30

Pandas函數(shù)數(shù)據(jù)分析

2010-11-26 09:45:56

2023-10-10 08:33:40

編程范式命令式編程

2014-12-23 14:36:32

PHP

2019-11-17 22:20:57

Python編程語言程序員

2020-12-28 06:20:27

OptionalTryjava

2009-08-25 10:58:41

PHP命名空間

2010-07-05 16:33:00

PHPPHP命名空間

2022-05-27 09:02:31

Openbase開源前端

2010-07-09 09:01:55

2009-07-16 15:02:33

Shapes命名空間Net Micro F

2009-03-23 10:53:00

PHP5.3新特性PHP5.3PHP5

2020-07-13 07:00:21

Kubernetes

2009-05-13 14:15:09

PHP 5.3閉包匿名函數(shù)

2009-11-23 14:17:50

PHP 5.3閉包語法

2009-07-01 09:32:11

PHP 5.3.0
點贊
收藏

51CTO技術(shù)棧公眾號