婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP命名空間(namespace)原理與用法詳解

PHP命名空間(namespace)原理與用法詳解

熱門標簽:昭通辦理400電話 山西探意電話機器人 山西回撥外呼系統(tǒng) 騰訊外呼管理系統(tǒng) 青島語音外呼系統(tǒng)招商 河南電銷卡外呼系統(tǒng)哪家強 岳陽外呼型呼叫中心系統(tǒng)在哪里 揚州地圖標注app 百應電話機器人服務

本文實例講述了PHP命名空間(namespace)原理與用法。分享給大家供大家參考,具體如下:

PHP 命名空間(namespace)是在PHP 5.3中加入的,它可以解決以下兩類問題:

  1. 用戶編寫的代碼與PHP內(nèi)部的類/函數(shù)/常量或第三方類/函數(shù)/常量之間的名字沖突。
  2. 為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創(chuàng)建一個別名(或簡短)的名稱,提高源代碼的可讀性。

我們在默認情況下,所有常量、類和函數(shù)名都放在全局空間下,就和PHP支持命名空間之前一樣,命名空間通過關鍵字namespace 來聲明,如果一個文件中包含命名空間,它必須在其它所有代碼之前聲明命名空間。我們來看下語法:

?php 
// 定義代碼在 'MyProject' 命名空間中 
namespace MyProject; 
// ... 代碼 ...

我們也可以在同一個文件中定義不同的命名空間代碼,如下:

?php 
namespace MyProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
namespace AnotherProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
?>

不過我不建議使用這種語法在單個文件中定義多個命名空間,有需要的話,可以使用大括號形式的語法,如下:

?php
namespace MyProject {
  const CONNECT_OK = 1;
  class Connection { /* ... */ }
  function connect() { /* ... */ }
}
namespace AnotherProject {
  const CONNECT_OK = 1;
  class Connection { /* ... */ }
  function connect() { /* ... */ }
}
?>

我們?nèi)绻獙⑷值姆敲臻g中的代碼與命名空間中的代碼組合在一起,只能使用大括號形式的語法,并且全局代碼必須用一個不帶名稱的 namespace 語句加上大括號括起來,如下:

?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace { // 全局代碼
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>

我們在聲明命名空間之前唯一合法的代碼是用于定義源文件編碼方式的 declare 語句,要記住,除了這個之外的所有非 PHP 代碼包括空白符都不能出現(xiàn)在命名空間的聲明之前,如下:

?php
declare(encoding='UTF-8'); //定義多個命名空間和不包含在命名空間中的代碼
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace { // 全局代碼
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>

看個錯誤的寫法:

html>
?php
namespace MyProject; // 命名空間前出現(xiàn)了“html>” 會致命錯誤 - 命名空間必須是程序腳本的第一條語句
?>

與目錄和文件的關系很像,PHP 命名空間也允許指定層次化的命名空間的名稱,因此,命名空間的名字可以使用分層次的方式定義,模式如下:

?php
namespace MyProject\Sub\Level; //聲明分層次的單個命名空間
const CONNECT_OK = 1;
class Connection { /* ... */ }
function Connect() { /* ... */ }
?>

上述代碼中,創(chuàng)建了常量 MyProject\Sub\Level\CONNECT_OK,類 MyProject\Sub\Level\Connection 和函數(shù) MyProject\Sub\Level\Connect。

咱們再來看下PHP 命名空間中的類名的引用方式:

  1. 非限定名稱,或不包含前綴的類名稱,例如 $a=new foo(); 或 foo::staticmethod();。如果當前命名空間是 currentnamespace,foo 將被解析為 currentnamespace\foo。如果使用 foo 的代碼是全局的,不包含在任何命名空間中的代碼,則 foo 會被解析為foo。 警告:如果命名空間中的函數(shù)或常量未定義,則該非限定的函數(shù)名稱或常量名稱會被解析為全局函數(shù)名稱或常量名稱。
  2. 限定名稱,或包含前綴的名稱,例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。如果當前的命名空間是 currentnamespace,則 foo 會被解析為 currentnamespace\subnamespace\foo。如果使用 foo 的代碼是全局的,不包含在任何命名空間中的代碼,foo 會被解析為subnamespace\foo。
  3. 完全限定名稱,或包含了全局前綴操作符的名稱,例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在這種情況下,foo 總是被解析為代碼中的文字名(literal name)currentnamespace\foo。

咱們用來個文件來演示下,首先來看f1.php的代碼:

?php
namespace Foo\Bar\subnamespace; 
const FOO = 1;
function foo() {}
class foo
{
  static function staticmethod() {}
}
?>

之后就是f2.php的代碼:

?php
namespace Foo\Bar;
include 'f1.php';
const FOO = 2;
function foo() {}
class foo
{
  static function staticmethod() {}
}
/* 非限定名稱 */
foo(); // 解析為函數(shù) Foo\Bar\foo
foo::staticmethod(); // 解析為類 Foo\Bar\foo ,方法為 staticmethod
echo FOO; // 解析為常量 Foo\Bar\FOO
/* 限定名稱 */
subnamespace\foo(); // 解析為函數(shù) Foo\Bar\subnamespace\foo
subnamespace\foo::staticmethod(); // 解析為類 Foo\Bar\subnamespace\foo,
                 // 以及類的方法 staticmethod
echo subnamespace\FOO; // 解析為常量 Foo\Bar\subnamespace\FOO
/* 完全限定名稱 */
\Foo\Bar\foo(); // 解析為函數(shù) Foo\Bar\foo
\Foo\Bar\foo::staticmethod(); // 解析為類 Foo\Bar\foo, 以及類的方法 staticmethod
echo \Foo\Bar\FOO; // 解析為常量 Foo\Bar\FOO
?>

我們訪問任意全局類、函數(shù)或常量,都可以使用完全限定名稱,例如 \strlen() 或 \Exception 或 \INI_ALL。之后,咱們再來看下在命名空間內(nèi)部訪問全局類、函數(shù)和常量的實例:

?php
namespace Foo;
function strlen() {}
const INI_ALL = 3;
class Exception {}
$a = \strlen('hi'); // 調(diào)用全局函數(shù)strlen
$b = \INI_ALL; // 訪問全局常量 INI_ALL
$c = new \Exception('error'); // 實例化全局類 Exception
?>

PHP 命名空間的實現(xiàn)受到其語言自身的動態(tài)特征的影響,我們先來看一段代碼:

?php
class classname
{
  function __construct()
  {
    echo __METHOD__,"\n";
  }
}
function funcname()
{
  echo __FUNCTION__,"\n";
}
const constname = "global";
$a = 'classname';
$obj = new $a; // prints classname::__construct
$b = 'funcname';
$b(); // prints funcname
echo constant('constname'), "\n"; // prints global
?>

我們?nèi)绻獙⑸鲜龅拇a轉(zhuǎn)換到命名空間中,并且動態(tài)訪問元素,就必須使用完全限定名稱(包括命名空間前綴的類名稱)。注意因為在動態(tài)的類名稱、函數(shù)名稱或常量名稱中,限定名稱和完全限定名稱沒有區(qū)別,因此其前導的反斜杠是不必要的。如下:

?php
namespace namespacename;
class classname
{
  function __construct()
  {
    echo __METHOD__,"\n";
  }
}
function funcname()
{
  echo __FUNCTION__,"\n";
}
const constname = "namespaced";
include 'example1.php';
$a = 'classname';
$obj = new $a; // 輸出 classname::__construct
$b = 'funcname';
$b(); // 輸出函數(shù)名
echo constant('constname'), "\n"; // 輸出 global
/* 如果使用雙引號,使用方法為 "\\namespacename\\classname"*/
$a = '\namespacename\classname';
$obj = new $a; // 輸出 namespacename\classname::__construct
$a = 'namespacename\classname';
$obj = new $a; // 輸出 namespacename\classname::__construct
$b = 'namespacename\funcname';
$b(); // 輸出 namespacename\funcname
$b = '\namespacename\funcname';
$b(); // 輸出 namespacename\funcname
echo constant('\namespacename\constname'), "\n"; // 輸出 namespaced
echo constant('namespacename\constname'), "\n"; // 輸出 namespaced
?>

好啦,本次記錄就到這里了,后續(xù)的記錄會在之后的文章中有體現(xiàn)。

更多關于PHP相關內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:
  • 詳細分析PHP 命名空間(namespace)
  • PHP類的自動加載與命名空間用法實例分析
  • PHP 命名空間和自動加載原理與用法實例分析
  • PHP 命名空間原理與用法詳解
  • php 命名空間(namespace)原理與用法實例小結(jié)
  • PHP命名空間用法實例分析
  • PHP命名空間與自動加載機制的基礎介紹
  • php的命名空間與自動加載實現(xiàn)方法
  • 詳解PHP中的命名空間

標簽:宜賓 鎮(zhèn)江 南陽 湛江 婁底 寶雞 銅川 黃南

巨人網(wǎng)絡通訊聲明:本文標題《PHP命名空間(namespace)原理與用法詳解》,本文關鍵詞  PHP,命名,空間,namespace,原理,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP命名空間(namespace)原理與用法詳解》相關的同類信息!
  • 本頁收集關于PHP命名空間(namespace)原理與用法詳解的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    一区二区三区在线观看视频| 国产尤物一区二区| 久久综合色鬼综合色| 大尺度一区二区| 色一情一伦一子一伦一区| 国产美女娇喘av呻吟久久| 三级一区在线视频先锋| 亚洲精品videosex极品| 福利一区二区在线观看| 色域天天综合网| 国产成人一区二区精品非洲| 91免费观看视频在线| 高清在线不卡av| 欧美日韩1区2区| 91视频在线看| 99精品在线免费| 成人黄色一级视频| 久久精品久久久精品美女| 亚洲mv在线观看| 亚洲r级在线视频| 亚洲精品乱码久久久久久久久 | 欧美绝品在线观看成人午夜影视| 久久av中文字幕片| 麻豆国产精品视频| 偷拍一区二区三区| 蜜乳av一区二区| 亚洲人亚洲人成电影网站色| 蜜臀av一区二区三区| 午夜欧美2019年伦理| 不卡av在线免费观看| 不卡在线观看av| 久久婷婷国产综合精品青草| 精品国产免费人成在线观看| 一区二区在线免费| 亚洲一区二区免费视频| www.亚洲色图| 在线精品国精品国产尤物884a| 91精品国产综合久久久久久 | 日韩欧美高清一区| 亚洲欧美二区三区| 樱桃国产成人精品视频| 成人午夜视频福利| 91久久线看在观草草青青| 国产精品国产三级国产普通话99 | 欧美电影一区二区三区| 亚洲欧美色图小说| 亚洲午夜久久久久久久久久久 | 成人av在线影院| 337p日本欧洲亚洲大胆精品| 日本一区二区视频在线观看| 综合亚洲深深色噜噜狠狠网站| 性感美女极品91精品| 三级不卡在线观看| 6080午夜不卡| 26uuu亚洲综合色| 亚洲综合丁香婷婷六月香| 久久国产福利国产秒拍| 粉嫩蜜臀av国产精品网站| 欧美视频一区在线| 精品精品欲导航| 国产成人亚洲综合a∨婷婷图片| 成人av网址在线观看| 中文字幕一区二区三区四区 | 日韩一区二区精品在线观看| 国产视频一区二区在线观看| 一区二区三区精品视频| 欧美成人精精品一区二区频| 亚洲同性同志一二三专区| 亚洲国产成人91porn| 91麻豆精品91久久久久同性| 欧美激情一区二区三区四区| 成人国产精品免费网站| 欧美性大战久久久久久久 | 久久精品人人做人人爽人人| 久久电影网电视剧免费观看| av在线不卡网| 亚洲欧洲性图库| 精品一区二区久久久| 欧美tk丨vk视频| 视频一区视频二区中文| 欧美一级xxx| 亚洲第一在线综合网站| 欧美电影免费观看高清完整版在线| 亚洲精品一区二区三区福利| 亚洲国产乱码最新视频| 亚洲成人动漫av| 日韩av不卡一区二区| 精品国产电影一区二区| 中文字幕日韩精品一区| 色呦呦网站一区| 欧美日韩不卡一区二区| 国产美女在线观看一区| 色狠狠色狠狠综合| 久久―日本道色综合久久| 午夜激情一区二区三区| 在线视频你懂得一区| 欧美精品乱人伦久久久久久| 一区二区三区在线不卡| 91久久奴性调教| 国产麻豆欧美日韩一区| 2020日本不卡一区二区视频| 色综合久久综合网| 亚洲免费电影在线| 久久久久亚洲综合| 国产超碰在线一区| 秋霞影院一区二区| 日韩片之四级片| 91黄色激情网站| 亚洲成a人片综合在线| 国产欧美一区二区精品久导航| 欧美午夜精品久久久| 午夜精品久久久久久久99樱桃| 中文字幕在线观看不卡| av在线一区二区三区| 国产精品一级在线| 日韩视频永久免费| 欧美三级日韩在线| 99精品视频在线播放观看| 亚洲综合色网站| 国产精品久久久久久久蜜臀| 不卡视频在线看| 国产电影精品久久禁18| 国产精品二区一区二区aⅴ污介绍| 日韩免费高清av| 国产精品小仙女| 国产精品亚洲综合一区在线观看| 国产精品妹子av| 欧美经典一区二区三区| 色综合天天狠狠| 91麻豆精品秘密| 日韩电影一区二区三区四区| 亚洲国产视频网站| 精品少妇一区二区三区在线视频| 91麻豆精品国产91久久久更新时间| 国产自产v一区二区三区c| 毛片av一区二区| 国产精品美女久久久久av爽李琼 | 欧美视频三区在线播放| 亚洲精品免费在线观看| 亚洲视频精选在线| 国产91对白在线观看九色| 国产一区啦啦啦在线观看| 久久婷婷国产综合精品青草| 欧美日韩综合在线| 欧美日韩精品久久久| 成人av一区二区三区| 99re在线精品| 日本视频在线一区| 久久国产夜色精品鲁鲁99| 欧美国产一区视频在线观看| 7777精品伊人久久久大香线蕉的 | 欧美视频日韩视频| 国产成人三级在线观看| 国产91精品精华液一区二区三区| 亚洲影院理伦片| 毛片av一区二区三区| 一区二区三区蜜桃网| 丝袜国产日韩另类美女| 中文字幕一区二区三区蜜月| 亚洲综合在线观看视频| 久久久久久免费| 亚洲图片激情小说| 国产日韩一级二级三级| 综合激情成人伊人| 国产呦萝稀缺另类资源| 成人午夜电影网站| 在线影院国内精品| 国产成人av电影在线观看| 99久久精品国产一区二区三区 | 国产一区二区三区四| 成人精品gif动图一区| 日韩激情av在线| 国产91精品一区二区麻豆亚洲| 免费高清在线一区| av一区二区三区四区| 狠狠色丁香久久婷婷综合_中| 99视频超级精品| 日本一不卡视频| 成人高清视频在线观看| 精品国产一区二区亚洲人成毛片| 亚洲国产电影在线观看| 欧美色大人视频| 日韩你懂的在线观看| 精品福利一二区| 久久综合九色综合久久久精品综合| 中文字幕综合网| 亚洲老司机在线| 国产不卡视频在线观看| 高清免费成人av| 欧美一区二区三区人| 欧美一区二区三区在线电影 | 成人欧美一区二区三区| 久久精品国产99国产| 国产人伦精品一区二区| 日本不卡在线视频| 日韩欧美视频一区| 亚洲精品日产精品乱码不卡| 免费观看在线综合色| 激情国产一区二区| 欧美日韩国产一级片|