文章出處

  先寫兩個文件

a.php

1 <?php
2 class apple {
3     function get_info() {
4         echo "this is A apple";
5     }
6 }

b.php

1 <?php
2 class apple {
3     function get_info() {
4         echo "this is A apple";
5     }
6 }

然后我在index.php中引用這兩個文件

1 <?php
2 require_once('a.php');
3 require_once('b.php');
4 
5 $apple = new apple();
6 $apple->get_info();

因為a.php和b.php都包含了class apple這個類,index.php調用apple這個類的時候就會出現問題:

1 Fatal error: Cannot redeclare class apple in D:\phpStudy\WWW\namespace\b.php on line 3

這時候就需要使用到namespace了,在a.php和b.php分別加上namespace

a.php

1 <?php
2 namespace a\b\c;
3 class apple {
4     function get_info() {
5         echo "this is A apple";
6     }
7 }

b.php

1 namespace d\e\f;
2 class apple{
3      function get_info() {
4         echo "this is B apple";
5     }
6 }

然后在index.php中調用時(使用use表示使用該命名空間中的apple)

1 <?php
2 require_once('a.php');
3 require_once('b.php');
4 
5 use a\b\c\apple;
6 
7 $apple = new apple();
8 $apple->get_info();

這時瀏覽器輸出:

1 this is A apple

如果我們使用兩個use呢?

 1 <?php
 2 require_once('a.php');
 3 require_once('b.php');
 4 
 5 use a\b\c\apple;
 6 use d\e\f\apple ;
 7 
 8 $apple = new apple();
 9 $apple->get_info();
10 
11 echo "<br>";
12 
13 $bapple = new apple();
14 $bapple->get_info();

瀏覽器輸出:

Fatal error: Cannot use d\e\f\apple as apple because the name is already in use in D:\phpStudy\WWW\namespace\index.php on line 6

也就是在引用apple這個類的時候,有兩個apple,雖然是申明了命名空間,但引用的時候就不知道到底使用的是哪個,

這時就需要使用別名了(使用as來命名別名);

 1 <?php
 2 require_once('a.php');
 3 require_once('b.php');
 4 
 5 use a\b\c\apple;
 6 use d\e\f\apple as Bapple ;
 7 
 8 $apple = new apple();
 9 $apple->get_info();
10 
11 echo "<br>";
12 
13 $bapple = new Bapple();
14 $bapple->get_info();

瀏覽器輸出:

this is A apple
this is B apple

 

這時我們新建c.php,并且不給命名空間

1 <?php
2 class apple{
3     function get_info(){
4         echo "this is c apple";
5     }
6 }

然后在index.php中:

 1 <?php
 2 require_once('a.php');
 3 require_once('b.php');
 4 require_once('c.php');
 5 
 6 use a\b\c\apple;
 7 use d\e\f\apple as Bapple ;
 8 
 9 $apple = new apple();
10 $apple->get_info();
11 
12 echo "<br>";
13 
14 $bapple = new Bapple();
15 $bapple->get_info();
16 
17 echo "<br>";
18 
19 $capple = new \apple();
20 $capple->get_info();

直接在$capple引用c.php中的apple時,前面加上\符號即可,表示全局類。

輸出:

this is A apple
this is B apple
this is c apple

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()