首頁 > 後端開發 > php教程 > 無限娃娃,namesapce的命名之路

無限娃娃,namesapce的命名之路

autoload
發布: 2023-04-09 18:46:01
原創
3059 人瀏覽過

    學完namespace,順手來個命名空間的小總結。

1.命名空間的使用目的

   PHP函數類別

常數是不允許同名的。為了解決這三者的同名問題,所以出現了命名空間,故而命名空間只影響類別、函數、常數

(

const)。

2.命名空間的使用格式

      a.可以命名一個空間

<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> &lt;?php namespace space1;//namespace关键字+空间名 代码; ?&gt;</pre><div class="contentsignin">登入後複製</div></div>      

#b.也可以同時命名多個空間

<?php
namespace space1;//namespace关键字 +空间名 
代码1;
namespace space2;
代码2;
namespace space3;
代码3;
.......//代码1,代码2,代码3,可相同亦可不同
.......
 ?>
登入後複製

   注意事項:如果一個php檔案中,第一個空間的定義義必須放在第1行。不過凡事都有例外,在聲明命名空間之前還有唯一合法的程式碼是用來定義原始檔編碼方式的

declare 語句。所有非 PHP 程式碼包括空格符都不能出現在命名空間的宣告之前。例如下面的程式碼會報錯。

<html>
<?php
namespace space1;
namespace space2;
?>
</html>
登入後複製
3.命名空間的存取 

命名空間的存取分為:

非限定空間存取限定空間存取

完全限定空間存取

       a.非限定空間存取

<?php
namespace space3;
   function f1(){
   echo "space3";
   }
namespace space3\space2;//其中"\"代表space2是space3的子空间,同理space3是space2的父空间。
   function f1(){
     echo "space2";
     }
namespace space3\space2\space1;
   function f1(){
     echo "space1";
     }
   f1();//对上面空间成员进行访问,输出结果为:space1
?>
登入後複製
     

b.限定空間存取

<?php
namespace space2\space1;
    function f1(){
     echo "space1";
      }
namespace space2;
function f1(){
     echo "space2";
      }
   f1();//此时输出的是 space2
   space1\f1();//此时输出的是space1
?>
登入後複製

 

  限定空間存取#<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">&lt;?php namespace space3; function f1(){ echo &quot;space3&quot;; } namespace space2; function f1(){ echo &quot;space2&quot;; } namespace space1; function f1(){ echo &quot;space1&quot;; } f1();//对上面空间成员进行访问,输出结果为:space1 \space3\f1();//对space3进行访问,输出结果为:space3 \space2\f1();//对space2进行访问,输出结果为:space2 ?&gt;</pre><div class="contentsignin">登入後複製</div></div>   .完全限定空間存取

<?php
namespace space3;
   function f1(){
   echo "space3";
   }
//当前所有访问如果使用非限定名称都代表访问当前空间内的元素
f1();//访问space3下f1()函数
//想要访问函数
define(&#39;PI&#39;,3.14);//space3下没有define()函数,全局函数有
//想要访问系统常量
echo PHP_VERSION; //space3下没有define()函数,全局函数有


//想要访问类

//错误方案
//$m=new Mysqli(&#39;localhost&#39;,&#39;root&#39;,&#39;root&#39;);//系统会提示类不存在

//正确方案
$m= new \Mysqli(&#39;localhost&#39;,&#39;root&#39;,&#39;root&#39;);

?>
登入後複製

4.引入空間成員      a.

use

# 空間名稱\空間名【as 別名】:將指定空間引入目前空間。同可以使用as關鍵字為被引入的空間起個別名

      b.use

空間名稱\空間名稱\成員類別【
    as
  •  別名】:將指定的空間中的成員引入到目前空間,引入空間成員只能引入類別

    #5.一些小情況

  • ##   
  • 一旦命名空間出現,那麼空間元素(類別、常數、函數)的存取就被限定在空間內,如果使用非限定空間訪問,系統會出現以下解析邏輯(限定名稱或完全限定名稱是直接依照路徑準確找出) 

    先在自己空間內找出

 其次在如果找不到元素,不同空間元素的處理方式不同

             系統常數,系統函數若找不到,會全域空間去找
              系統類別是不會自動去全域空間去找的(報錯,提示空間找不到)

######rrreee######  ### 推薦:###php教學###############

以上是無限娃娃,namesapce的命名之路的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板