PHP如何進(jìn)行命名空間_PHP命名空間有什么方法
命名空間是在php5.3以后新增的一個(gè)特性,php中的函數(shù)名、常量名、類名都不能重復(fù)定義。下面由學(xué)習(xí)啦小編為大家整理的PHP命名空間的方法,希望大家喜歡!
PHP命名空間的方法
一、定義命名空間
命名空間的定義必須是PHP文件的第一條語句。唯一允許在定義命名空間之前使用的語句是declare語句。
定義命名空間很簡單,只需要使用關(guān)鍵字namespace即可。命名空間的名字需要遵循PHP文件中其他標(biāo)識(shí)符的命名規(guī)則。
下面是定義一個(gè)命名空間的示例:
代碼如下:
namespace MyNamespace{
class Test{
}
}
二、子命名空間
命名空間可以遵循一個(gè)特定的層級(jí),就像我們電腦文件系統(tǒng)中得目錄一樣。子命名空間對于將一個(gè)項(xiàng)目結(jié)構(gòu)化尤其特別有用。例如,你的項(xiàng)目需要訪問數(shù)據(jù)庫,你可能會(huì)想將所有數(shù)據(jù)庫相關(guān)的代碼(如數(shù)據(jù)庫異常處理等)放在同一個(gè)子目錄下。
為了保持靈活性,將子命名空間放在子目錄中是非常明智的做法。這會(huì)使你的代碼結(jié)構(gòu)更清晰,而且會(huì)使遵循PSR-0標(biāo)準(zhǔn)的autoloaders的使用變得更容易。
PHP使用反斜線作為命名空間的分隔符,有趣的是,PHP甚至考慮過使用笑臉:)作為命名空間的分隔符。
子命名空間定義示例:
代碼如下:
namespace MyProjectDatabase
class Connection {
}
三、動(dòng)態(tài)調(diào)用
PHP是一門動(dòng)態(tài)語言,也可以將PHP的這種特性用來調(diào)用命名空間。這在本質(zhì)上與實(shí)例化一個(gè)變量類和包含一個(gè)變量文件是相同的。在字符串中,PHP使用的命名空間分隔符()也是一個(gè)元字符,因此需要轉(zhuǎn)義。
代碼如下:
namespace OtherProject;
$project_name = 'MyProject';
$package_name = 'Database';
$class_name = 'Connection';
四、namespace關(guān)鍵字
關(guān)鍵字namespace不僅僅可以用來定義一個(gè)命名空間,它也可以用來顯示的表示當(dāng)前命名空間,它此時(shí)的作用相當(dāng)于類中的self關(guān)鍵字。
代碼如下:
namespace MyProject;
function run()
{
echo 'Running from a namespace!';
}
五、導(dǎo)入或別名
PHP中得命名空間也支持導(dǎo)入,導(dǎo)入也被成為別名。只有類、接口和命名空間可以被導(dǎo)入(別名)。導(dǎo)入是命名空間中一個(gè)非常有用和基礎(chǔ)的功能。它使我們可以使用外部的代碼包,而不用擔(dān)心名字的沖突。使用use關(guān)鍵字可以實(shí)現(xiàn)導(dǎo)入功能。也可以使用as關(guān)鍵字,在導(dǎo)入的時(shí)候指定一個(gè)別名。
代碼如下:
use [name of class, interface or namespace] as [optional_custom_alias]
一個(gè)完全限定的名字可以用一個(gè)未限定的別名來代替,這樣我們就不用在每次使用的時(shí)候都使用完全限定的名字,達(dá)到簡化代碼的目的。導(dǎo)入應(yīng)該在命名空間的最高層或者全局空間中使用,在函數(shù)作用域內(nèi)使用導(dǎo)入功能是非法的語法。
php字母大小轉(zhuǎn)換方法
1.將字符串轉(zhuǎn)換成小寫
strtolower(): 該函數(shù)將傳入的字符串參數(shù)所有的字符都轉(zhuǎn)換成小寫,并以小定形式放回這個(gè)字符串
2.將字符轉(zhuǎn)成大寫
strtoupper(): 該函數(shù)的作用同strtolower函數(shù)相反,是將傳入的字符參數(shù)的字符全部轉(zhuǎn)換成大寫,并以大寫的形式返回這個(gè)字符串.用法同strtolowe()一 樣.
3.將字符串首字符轉(zhuǎn)換成大寫
ucfirst(): 該函數(shù)的作用是將字符串的第一個(gè)字符改成大寫,該函數(shù)返回首字符大寫的字符串.用法同strtolowe()一樣.
4.將字符串每個(gè)單詞的首字符轉(zhuǎn)換成大寫
ucwords(): 該函數(shù)將傳入的字符串的每個(gè)單詞的首字符變成大寫.如"hello world",經(jīng)過該函數(shù)處理后,將返回"Hello Word".用法同strtolowe()一樣.
php的常用運(yùn)行方式
1、CGI
CGI即通用網(wǎng)關(guān)接口(common gatewag interface),它是一段程序,通俗的講CGI就象是一座橋,把網(wǎng)頁和WEB服務(wù)器中的執(zhí)行程序連接起來,它把HTML接收的指令傳遞給服務(wù)器的執(zhí) 行程序,再把服務(wù)器執(zhí)行程序的結(jié)果返還給HTML頁。CGI 的跨平臺(tái)性能極佳,幾乎可以在任何操作系統(tǒng)上實(shí)現(xiàn)。
CGI方式在遇到連接請求(用戶 請求)先要?jiǎng)?chuàng)建cgi的子進(jìn)程,激活一個(gè)CGI進(jìn)程,然后處理請求,處理完后結(jié)束這個(gè)子進(jìn)程。這就是fork-and-execute模式。所以用cgi 方式的服務(wù)器有多少連接請求就會(huì)有多少cgi子進(jìn)程,子進(jìn)程反復(fù)加載是cgi性能低下的主要原因。都會(huì)當(dāng)用戶請求數(shù)量非常多時(shí),會(huì)大量擠占系統(tǒng)的資源如內(nèi) 存,CPU時(shí)間等,造成效能低下。
2、FastCGI
fast-cgi 是cgi的升級(jí)版本,F(xiàn)astCGI像是一個(gè)常駐(long-live)型的CGI,它可以一直執(zhí)行著,只要激活后,不會(huì)每次都要花費(fèi)時(shí)間去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全稱PHP FastCGI進(jìn)程管理器進(jìn)行管理。
Web Server啟動(dòng)時(shí)載入FastCGI進(jìn)程管理器(IIS ISAPI或Apache Module)。FastCGI進(jìn)程管理器自身初始化,啟動(dòng)多個(gè)CGI解釋器進(jìn)程(可見多個(gè)php-cgi)并等待來自Web Server的連接。
當(dāng)客戶端請求到達(dá)Web Server時(shí),F(xiàn)astCGI進(jìn)程管理器選擇并連接到一個(gè)CGI解釋器。Web server將CGI環(huán)境變量和標(biāo)準(zhǔn)輸入發(fā)送到FastCGI子進(jìn)程php-cgi。
FastCGI子進(jìn)程完成處理后將標(biāo)準(zhǔn)輸出和錯(cuò)誤信息從同一連接返回Web Server。當(dāng)FastCGI子進(jìn)程關(guān)閉連接時(shí),請求便告處理完成。FastCGI子進(jìn)程接著等待并處理來自FastCGI進(jìn)程管理器(運(yùn)行在Web Server中)的下一個(gè)連接。 在CGI模式中,php-cgi在此便退出了。
在上述情況中,你可以想象CGI通常有多慢。每一個(gè)Web 請求PHP都必須重新解析php.ini、重新載入全部擴(kuò)展并重初始化全部數(shù)據(jù)結(jié)構(gòu)。使用FastCGI,所有這些都只在進(jìn)程啟動(dòng)時(shí)發(fā)生一次。一個(gè)額外的 好處是,持續(xù)數(shù)據(jù)庫連接(Persistent database connection)可以工作。
3、APACHE2HANDLER
PHP作為Apache模塊,Apache服務(wù)器在系統(tǒng)啟動(dòng)后,預(yù)先生成多個(gè)進(jìn)程副本駐留在內(nèi)存中,一旦有請求出 現(xiàn),就立即使用這些空余的子進(jìn)程進(jìn)行處理,這樣就不存在生成子進(jìn)程造成的延遲了。這些服務(wù)器副本在處理完一次HTTP請求之后并不立即退出,而是停留在計(jì)算機(jī)中等待下次請求。對于客戶瀏覽器的請求反應(yīng)更快,性能較高。
4、CLI
cli是php的命令行運(yùn)行模式,cli端的運(yùn)行命令有時(shí)會(huì)很有用,以下總結(jié)幾個(gè):
查看php版本信息
5eric:~ youngeric$ php -vPHP 5.5.38 (cli) (built: Oct 1 2016 23:03:00) Copyright (c) 1997-2015 The PHP GroupZend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies