① 在php 命名空間 可以使用關鍵詞作為函數名嗎
PHP 命名空間提供了一種將相關的類、函數和常量組合到一起的途徑,有點類似於文件管理器中,按照不同的文件夾來管理文件。根據 PHP 手冊:
在PHP中,命名空間用來解決在編寫類庫或應用程序時創建可重用的代碼如類或函數時碰到的兩類問題:
用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字沖突。
為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創建一個別名(或簡短)的名稱,提高源代碼的可讀性。
在 php 命名空間中,語法等等都依舊遵循原有規則,因此,關鍵詞不可以使用作為函數名。
② PHP 命名空間
1. namespace Zend\Http\PhpEnvironment;
這句代碼定義了一個命名空間,你可以理解為定義一個名稱為 Zend\Http\PhpEnvironment 的域名。
在定義了之後,下面所申明的class, interface, const等都是在申明的這個「域」裡面的。當引用一個申明了命名空間的包含文件,想要調用這個裡面的東西,那就必須:
調整當前腳本也到這個域名里,否則,就得用namesapce的全稱。
比如,inc.php 文件:
namespace Zend\Http\PhpEnvironment;
class Bar {}//定義了一個類
則其他文件調用時:
// 訪問Foo的第一種方法,用全稱
require 'inc.php';
$foo = new \Zend\Http\PhpEnvironment\Bar();
// 訪問Foo的第二種方法
namespace Foo; // 調整當前腳本到Foo這個ns域,而且namespace申明必須在第一句
require 'inc.php';
$foo = new Bar();
2. use關鍵字目的是使用ns的別名:
比如說,上面的
// 訪問Foo的第一種方法,用全稱
require 'inc.php';
$foo = new \Zend\Http\PhpEnvironment\Bar();
用uses後,寫法如下:
use \Zend\Http\PhpEnvironment as pe; //定義別名
$foo = new \pe\Bar(); //用短的別名來代替原來的
如果省略後面的as ....,那麼,就可以直接用最後一節的文字來代替,比如,上面的:
use \Zend\Http\PhpEnvironment; //定義別名
$foo = new \PhpEnvironment\Bar(); //用短的別名來代替原來的
================================================
③ PHP 的use 命名空間 是什麼意思
有點類似於 java 中的包機制,用來解決重名問題的,每一個命名空間都是獨立的
給你舉個例子吧,比如我現在想寫兩個類,名字都叫 Action
<?php
namespaceA;//定義命名空間
classAction{
//..
}
namespaceB;//定義第二個命名空間
classAction{
//..
}
use 關鍵字用於導入某個命名空間下的類, 如果我在B空間內想使用A空間中的Action類,就需要導入這個類才能使用(當然也可以指明空間前綴來使用)
namespaceB;
//在本空間中需要使用A空間中的Action類,使用use導入
useAAction;//導入,如果本空間中也有一個Action會出現錯誤,因為類重名了
useAActionasA_Action;//通過取別名的方式解決
$var=newA_Action;
④ php命名空間沒有autoload能用么
能用。
__autoload 是當前需要使用的類沒有引入時,在PHP拋出錯誤前被觸發,未定義的類名會被當作參數傳入。
命名空間主要是為了解決命名沖突問題。單獨使用命名空間只是讓類名增加前綴,不發生沖突,系統並不會進行自動導入類。
只要你已經通過include等導入了類,就可以不使用autoload。
⑤ PHP的命名空間使用方法,求寫實例
假設程序涉及文件的輸入和輸出,那麼就要引入system.io這樣一個命名空間。
命名空間的引入主要是為了寫程序時代碼書寫簡單。
比如說filestream這個類,他就是命名空間system.io下的一個類。如果不在文件開頭引入system.io這個命名空間,那麼在程序中用到這個類的時候就要寫成system.io.filestream,相反,如果已經引入了這個命名空間就可以直接寫filestream了。
命名空間就是將一類具有相似相關功能的類和介面等打包。
只要在文件的開頭寫上using
system.io;
就可以直接使用這個命名空間下的類。
⑥ thinkphp命名空間有什麼作用,怎麼使用
在php里邊,同一個應用請求里邊如果存在兩個方法(類名),他們的名字一樣(例如都是getName()),由於php本身語法規則的限制,系統是要報錯的
解決方法:
① 把他們的名字改為不一樣的 例如 agetName() bgetName()
② 通過命名空間解決
Yii 框架為了避免名字重復引起問題,同步的類前邊都有 C 字樣
1. 簡單應用
a) 命名空間是虛擬的定義空間,不是真實存在目錄
b) 命名空間的分隔符都是反斜杠 \
c) 非限定名稱:getName() 獲得與其最近的命名空間的getName()
d) 限定名稱:beijing\getName() 相對方式 通過最近的命名空間定位beijing\getName()
e) 完全限定名稱: \beijing\getName() 直接在指定的命名空間獲得具體元素
f) 命名空間針對:函數、類名、常量三者其作用,在命名空間里邊把這三種統稱為元素
2、別名和導入
a) 導入/引入 use
b) 使用一個元素,使用非限定名稱,在當前最接近的空間里邊獲得元素
c) 如果當前空間里邊沒有指定元素,也可以在導入的空間里邊尋找
3、公共空間
a) 第一種情況
b) 沒有使用namespace定義空間,當前空間就是一個公共空間
c) 例如一個有namespace的文件引入了一個沒有namespace的文件程序
d) 沒有namespace的文件空間就是公共空間
e) 在namespace文件里邊可以通過\斜杠直接訪問公共空間元素
f) function getName(){} ------公共空間的元素
g) namespace beijing;
h) function getName(){} -----beijing空間的元素
i) 第二種情況
j) 當前文件沒有namespace、但是引入的文件有namespace
k) 當前文件就是公共空間,引入文件有自己空間
⑦ php命名空間的問題
php 的命令空間,和文件路徑無關。只要你的 autoload 函數能自動載入正確文件就行。當然,你也可以手動載入
⑧ thinkphp 命名空間什麼情況下使用,use後面載入什麼
命名空間其實只是為了載入文件更方便,tp的自動載入機制使用了它。
use 是繼承類使用的關鍵詞,當載入父類時,tp會更加use後面的命名空間查找對應的文件。tp會在多個目錄進行查找,具體的可以查看tp文檔的自動載入機制。
⑨ php的命名空間和java的命名空間有什麼分別嗎
php的名稱空間現在還不打好用吧,因為只有新版的php才支持名稱空間,以前版本的php不解析這個東西的。跟java比,因該區別大了,java的名稱空間是包,php的名稱空間因該不嚴格這樣,是邏輯包。