PHP 物件導向 (三)名稱空間

一句話兒發表於2020-01-18

作用:隔離程式碼,避免命名衝突

  • 名稱空間分類:

    1. 非限定名稱空間(類比為 當前路徑)
    2. 限定名稱空間(類比為 相對路徑)
    3. 完全限定名稱空間(類比為 絕對路徑)
  • 規則限制:

    1. 當前指令碼名稱空間前不能有任何程式碼
    2. 一個指令碼可以建立多個名稱空間
    3. 同一個名稱空間下,不能重複宣告類,同一個名稱空間可以使不同檔案,透過require引入即可
  • 引入類

    1. use引入
    2. 5.6支援引入全域性常量和函式

別名作用: 別名用於避免衝突

<?php
namespace Article {
    require("./demo4.php"); //引入其他檔案
    use MessageBoard\Comment as MessageComment; //別名
    use function MessageBoard\test; //引入函式
    class Comment
    {
        public $title;
        public $content;
        public function __construct($title, $content)
        {
            $this->title = $title;
            $this->content = $content;
        }

        public function getInfo()
        {
            echo $this->title.'--'.$this->content;echo "<br/>";
            $message_comment = new MessageComment('use_message_comment_title', 'use_message_comment_content');
            echo "<br/>";
            echo '透過use引入'.$message_comment->title;echo "<br/>";
            echo MessageComment::COMMENT;echo "<br/>";
            echo APP;echo "<br/>";
            test();echo "<br/>";
        }
    }
}

namespace MessageBoard {
    define('APP', '常量MessageBoard');
    function test(){
        echo 'this is test';
    }
    class Comment
    {
        const COMMENT = '常量COMMENT';
        public $title;
        public $content;
        public function __construct($title, $content)
        {
            $this->title = $title;
            $this->content = $content;
        }

        public function getInfo()
        {
            echo $this->title.'--'.$this->content;echo "<br/>";
        }
    }

    //當前路徑(非限定名稱)
    $messageComment = new Comment('message_title','message_content');
    $messageComment->getInfo();
    //絕對路徑(完全限定名稱)
    $articleConment = new \Article\Comment('article_title', 'article_content');
    $articleConment->getInfo();
    //相對路徑(限定名稱)
    $articleConment = new Article\Comment('message_article_title', 'message_article_content');
    $articleConment->getInfo();
    //絕對路徑(完全限定名稱)
    $articleConment1 = new \Article\Comment1('article_title1', 'article_content1');
    $articleConment1->getInfo();
}

namespace MessageBoard\Article {
    class Comment
    {
        public $title;
        public $content;
        public function __construct($title, $content)
        {
            $this->title = $title;
            $this->content = $content;
        }
        public function getInfo()
        {
            echo $this->title.'--'.$this->content;echo "<br/>";
        }
    }
}
demo4.php Article 名稱空間內引入的檔案
<?php
namespace Article {
    class Comment1
    {
        public $title;
        public $content;
        public function __construct($title, $content)
        {
            $this->title = $title;
            $this->content = $content;
        }

        public function getInfo()
        {
            echo $this->title.'--'.$this->content;echo "<br/>";
        }
    }
}

複製程式碼,即可執行。 謝謝你的瀏覽,如有錯誤,歡迎指正哈!!!

本作品採用《CC 協議》,轉載必須註明作者和本文連結
寫的不好,就當是整理下思緒吧。

相關文章