奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

php語言

PHP關(guān)鍵特性之命名空間實(shí)例

時(shí)間:2025-02-12 13:27:11 php語言 我要投稿
  • 相關(guān)推薦

PHP關(guān)鍵特性之命名空間實(shí)例

  命名空間主要是為了解決代碼中類和函數(shù)可能存在沖突的問題。這篇文章給大家介紹php關(guān)鍵特性之命名空間,包括命名空間的定義等知識(shí)點(diǎn),需要的朋友參考下吧.

  命名空間主要是為了解決代碼中類和函數(shù)可能存在沖突的問題,而這個(gè)特性其他語言一早就有,PHP則是姍姍來遲,它的出現(xiàn)催生了 PSR-4 的誕生,從而也催生了 Composer 的興起,所以是非常重要的特性。

  命名空間的定義

  命名空間是一個(gè)容器,這個(gè)容器主要是為了識(shí)別其下的類和函數(shù)。一旦定義了命名空間,它下面的代碼就屬于這個(gè)命名空間了,所以命名空間的定義要在代碼的最開始行。

  對(duì)于同一個(gè)包來說,同一個(gè)命名空間或者子命名空間的代碼沒有必要在一個(gè) PHP 文件中定義,子命名空間下的代碼是為了完成特定模塊的工作,組合起來就是一個(gè)包完整的命名空間。

  假如編寫的代碼沒有定義命名空間,那說明它屬于全局的命名空間(\ 符號(hào)),所以能夠直接引用類或者函數(shù)(不用添加 \ 符號(hào))。

  引用命名空間標(biāo)識(shí)符的三種方式

  (1)Fully-qualified name

  類似于操作系統(tǒng)上的絕對(duì)路徑,而且是完整的路徑,所以在理解的時(shí)候不會(huì)有誤解。

  比如在 new \A\B\C ,那么 C 就被會(huì)解析到 A\B 命名空間下的 C 類。

  (2)Qualified name

  類似于操作系統(tǒng)上的相對(duì)路徑,它包含部分名字并被引用到當(dāng)前的命名空間。

  比如 B\C() 在命名空間 A 下調(diào)用,則最終引用的命名空間就是 A\B\C()。

  (3)Unqualified name

  類似于Qualified name,但是沒包括子命名空間。

  比如 C() 在命名空間 A\B 下調(diào)用,則最終引用的命名空間就是 A\B\C()。

  通過一個(gè)例子來說明三種引用方式:

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  namespace \Example;

  require_once "fnction.php";

  class ClassA {}

  function Function() {}

  //完全限定名稱

  \Example\Function();

  \Example\B\Function();

  //限定名稱

  B\Function(); //指向 \Example\B\Function();

  //非限定名稱

  $test = new ClassA(); //resolves to \Example\ClassA

  Function(); //指向 \Example\Function

  注意:

  ?Inside a namespace,假如在 current scope 沒有發(fā)現(xiàn)函數(shù)和常量的定義,PHP 不會(huì)報(bào)錯(cuò)。而是去全局命名空間中尋找。

  ?Inside a namespace,假如在 current scope 沒有發(fā)現(xiàn)類的定義,則 PHP 會(huì)直接報(bào)錯(cuò),不會(huì)去全局域中找對(duì)應(yīng)的類,所以假如你需要引用一個(gè) internal 或用戶自定義的類,必須使用完全限定名稱。

  先舉個(gè)簡(jiǎn)單的例子,首先編寫一段代碼(定義在命名空間下),命名為 function.php :

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  17

  namespace Foo\Bar\subnamespace;

  const FOO = 1;

  function foo()

  {

  return "foo\r\n";

  }

  class foo

  {

  static function staticmethod()

  {

  return __METHOD__ . "\r\n" ;

  }

  function foofunction()

  {

  return __METHOD__ . "\r\n" ;

  }

  }

  再編寫一段代碼 test.php,也是處于命名空間之下的代碼:

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  17

  18

  19

  20

  21

  22

  23

  24

  25

  26

  27

  28

  namespace secondsp;

  include 'function.php';

  class foo

  {

  function foofunction()

  {

  return __METHOD__ . "\r\n" ;

  }

  }

  function is_file($file)

  {

  return true ;

  }

  //非限定名稱:實(shí)例化secondsp\foo類對(duì)象

  $obj = new foo;

  echo $obj->foofunction();

  //實(shí)例化Foo\Bar\subnamespace\foo 類對(duì)象

  $obj = new Foo\Bar\subnamespace\foo ;

  echo $obj->foofunction();

  //代碼會(huì)報(bào)錯(cuò),在命名空間內(nèi)部,假如無法找到當(dāng)前命名空間下的類,則會(huì)報(bào)錯(cuò)

  //$obj = new ArrayObject(array(1));

  $obj = new \ArrayObject(array(1));

  //在命名空間內(nèi)部,假如無法找到當(dāng)前命名空間下的函數(shù)或者常量,則會(huì)尋找 native function

  echo strlen("nihao");

  //引用當(dāng)前命名空間下的函數(shù)

  var_dump(is_file('nihao')); //True

  //引用全局函數(shù)

  var_dump(\is_file('nihao')); //False

  導(dǎo)入,別名

  假如要使用的命名空間層級(jí)很長(zhǎng)且數(shù)量很多,那么在使用的時(shí)候特別麻煩,所以可以使用 use 關(guān)鍵字導(dǎo)入命名空間、類、常量、函數(shù)等,然后可以使用它們直接引用完整的名稱。而 alias 關(guān)鍵字可以給導(dǎo)入的類和函數(shù)等重命名。

  舉個(gè)例子如何使用 use 關(guān)鍵字,該代碼處于全局命名空間之下:

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  17

  18

  19

  20

  21

  22

  include 'function.php';

  use Foo\Bar\subnamespace\foo ;

  $obj = new foo;

  echo $obj->foofunction();

  use Foo\Bar\subnamespace\foo as aliasfunname;

  $obj = new aliasfunname;

  echo $obj->foofunction();

  use Foo\Bar\subnamespace ;

  $obj = new subnamespace\foo ;

  echo $obj->foofunction();

  use Foo\Bar\subnamespace as aliasname;

  $obj = new aliasname\foo ;

  echo $obj->foofunction();

  //由于調(diào)用代碼并不在命名空間內(nèi),所以對(duì)于全局的類,無需引入使用

  $obj = new ArrayObject(array(1));

  //導(dǎo)入一個(gè)函數(shù)

  use function Foo\Bar\subnamespace\foo  ;

  echo foo();

  use function Foo\Bar\subnamespace\foo as func;

  echo func();

  use const Foo\Bar\subnamespace\FOO;

  //echo FOO;

  總結(jié):

  ?和 Python 不一樣,PHP 中的命名空間是語義上的一種概念,和具體代碼的位置、布局沒有關(guān)系,換句話說,使用命名空間的代碼需要自己引入庫文件(所有文件),至于庫文件如何組織無所謂;而在 Python 中,假如模塊或包中有一個(gè) __init__.py 文件,則 Python 解析器會(huì)自動(dòng)引入包或所有模塊的文件。

  ?PHP 中作用域的概念很弱化,全局域和局部域分的很清楚,比如在函數(shù)或類中無法引用全局空間中的變量。而在命名空間則不同,定義命名空間的代碼,假如找不到對(duì)應(yīng)命名空間下的常量和函數(shù),則會(huì)使用全局的常量和函數(shù);而假如找不到對(duì)應(yīng)名命名空間下的類(包括自定義類),則代碼直接報(bào)錯(cuò)。

  ?通過 use 關(guān)鍵字使用命名空間的,無須通過完全限定名稱的方式(\ 符號(hào))導(dǎo)入,因?yàn)?PHP 已經(jīng)假設(shè)導(dǎo)入的是完全限定的命名空間。

  ?通過 use 關(guān)鍵字可以導(dǎo)入常量、函數(shù)、類、接口、其他命名空間。

  ?命名空間是一種語言特性,為了追求更有效的使用,應(yīng)該有一種使用規(guī)范和自動(dòng)加載機(jī)制,這就是 PSR-4 規(guī)范。

【PHP關(guān)鍵特性之命名空間實(shí)例】相關(guān)文章:

PHP中的命名空間介紹09-01

PHP中命名空間的方法05-07

PHP curl之操作實(shí)例09-08

php之readdir函數(shù)用法實(shí)例09-21

PHP use類文件中的命名空間問題08-25

PHP的Socket通信之UDP通信實(shí)例07-27

PHP語言的命名規(guī)則09-29

php畫圖實(shí)例07-16

php查詢mysql的實(shí)例09-09

主站蜘蛛池模板: 汉源县| 泽普县| 方正县| 报价| 西畴县| 阳朔县| 乐清市| 虎林市| 揭东县| 建水县| 桐梓县| 铁岭市| 调兵山市| 广安市| 康乐县| 浑源县| 库伦旗| 和龙市| 紫阳县| 碌曲县| 时尚| 棋牌| 遵义县| 西林县| 黄大仙区| 汉阴县| 武汉市| 清流县| 盐津县| 大埔县| 洛宁县| 鸡东县| 贡嘎县| 萍乡市| 东港市| 资阳市| 繁昌县| 松阳县| 广西| 隆安县| 河间市|