php命名空間

命名空間

在php語言裏面,語法規則同名的函數、類名、常量在一個請求裏不容許出現屢次,若是有的程序不得以必須出現

同名的函數、類名、常量,能夠吧它們放到不一樣的空間裏面作請求,這個空間就是命名空間php

命名空間針對函數、類名、常量起做用,統稱爲元素函數

常量聲明

define(key,val);//忽略命名空間

const key=val; //受命名空間影響

訪問元素

  1. 默認當前空間(挨着最近的空間)(非限定名稱)
  2. 訪問其餘空間的元素 空間名元素(徹底限定名稱)
  3. 訪問當前空間子空間的元素 當前空間子空間名元素 (限定名稱) 當前空間和子空間名拼接

引入機制(下降空間書寫複雜度)

空間引入

use a\b\c\d;
echo d\fun(); //經過限定名稱方式訪問(限定名稱是引入空間名的最後一級名稱)

元素引入(只能引入類)

use a\b\c\d\類名;
echo 類名::$name; //非限定名稱訪問
若是當前空間有元素和引入的元素重名,應該給引入的元素起別名
use a\b\c\d\類名 as 類名X;
echo 類名X::$name; //非限定名稱訪問

公共空間(無namespace關鍵字)

  • 在有命名空間的設置的程序中訪問用 元素
  • 經過非限定方式訪問:先找當前空間元素(沒有再找公共空間)
注意
  1. 第一個namespace前面不能有任何代碼(header也要寫在下面)
  2. 命名空間名稱能夠重複,可是同名空間裏不能有同名元素

例子

<?php
    //namespace 空間名
    namespace space1;

    const USER='root';
    function a(){
        echo 'a';
    }

    namespace space2;

    const USER='admin';
    function a(){
        echo 'b';
    }
    
    //默認當前空間(挨着最近的空間)
    a();
    echo USER;


    //訪問其餘空間的元素
    \space1\a();
    echo \space1\USER;
    

    echo '<hr>';
    

    //多級空間
    namespace xian\yanta\yuhua;

    class stu{
        public $name='xiaobai';
        static $age='12';
    }

    namespace xianyang\liquan\junma;

    class stu{
        public $name='xiaohei';
    }

    //訪問當前空間
    $stu=new stu();
    echo $stu->name;

    //訪問其餘空間
    $stu=new \xian\yanta\yuhua\stu();
    echo $stu->name;

    echo '<hr>';

    namespace d1;
    
    function e(){
        echo 'e';
    }
    
    namespace d2\a;
    function e(){
        echo 'e2';
    }

    namespace d2;
    
    function e(){
        echo 'e1';
    }
    //1.非限定名稱
    e();

    //2.徹底限定名稱
    \d1\e();

    //3.限定名稱(自動拼接空間名)
    a\e();

    echo '<hr>';
    //空間引入
    use xian\yanta\yuhua;  //引入空間
    $stu=new yuhua\stu();  //限定名稱方式訪問
    echo $stu->name;

    echo '<hr>';
    //元素引入(僅類)
    use xian\yanta\yuhua\stu;
    echo stu::$age; //非限定名稱訪問
?>
相關文章
相關標籤/搜索