1.命名空間命名空間是什么?

1).命名空間在PHP 5.3中被引入,類似于文件夾的功能。例如Symfony框架中的R" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷資訊 > 網(wǎng)站運(yùn)營(yíng) > PHP新特性之命名空間、性狀和生成器

PHP新特性之命名空間、性狀和生成器

時(shí)間:2023-05-05 00:27:02 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-05-05 00:27:02 來(lái)源:網(wǎng)站運(yùn)營(yíng)

PHP新特性之命名空間、性狀和生成器:雖然專欄叫做前端讀書(shū)筆記,但是我相信你們一定也不會(huì)拒絕全世界最好的語(yǔ)言的~

1.命名空間

命名空間是什么?

1).命名空間在PHP 5.3中被引入,類似于文件夾的功能。例如Symfony框架中的Request和Response,位于Symfony的命名空間下。
2).命名空間始終應(yīng)該在<?php標(biāo)簽的下面一行。
3).PHP文件的命名空間和操作系統(tǒng)的物理文件系統(tǒng)不同,這是一個(gè)虛擬的概念,沒(méi)有必要和文件系統(tǒng)的目錄結(jié)構(gòu)完全對(duì)應(yīng)。雖然如此,絕大多數(shù)PHP組件為了兼容廣泛使用的PSR4自動(dòng)加載標(biāo)準(zhǔn),會(huì)把子命名空間放到文件系統(tǒng)的子目錄中去。
4).命名空間只是PHP語(yǔ)言的一種記號(hào),PHP解釋器會(huì)將這種記號(hào)作為前綴添加到類、接口、函數(shù)和常量的名稱前面。

為什么需要命名空間?

1).命名空間使得程序可以像沙盒一樣運(yùn)行,可以和其他開(kāi)發(fā)者編寫的代碼一起使用。確保了自己的代碼和項(xiàng)目可以和項(xiàng)目的第三方依賴一起使用。

聲明命名空間

1).頂層命名空間經(jīng)常用于設(shè)定頂層廠商名。
2).廠商的命名空間必須具有全局唯一性,子命名空間就沒(méi)有那么重要,但有助于組織項(xiàng)目的代碼。

導(dǎo)入和別名

1).從PHP5.3開(kāi)始可以導(dǎo)入PHP類、接口和其他命名空間,并為其創(chuàng)建別名。從PHP5.6開(kāi)始可以導(dǎo)入PHP函數(shù)和常量,并為其創(chuàng)建別名。
2).使用use關(guān)鍵字導(dǎo)入代碼時(shí)無(wú)須在開(kāi)頭加上/符號(hào),因?yàn)镻HP假定導(dǎo)入的是完全限定命名空間。use關(guān)鍵字必須出現(xiàn)在全局作用域中即不能出現(xiàn)在類或者函數(shù)中,因?yàn)檫@個(gè)關(guān)鍵字是在編譯的時(shí)候使用的,不過(guò),use關(guān)鍵字可以在命名空間聲明語(yǔ)句后使用,導(dǎo)入其他命名空間的代碼。
從PHP5.6開(kāi)始我們可以導(dǎo)入函數(shù)和常量。

<?phpuse func Namespace/functionName;functionName();也可以導(dǎo)入常量,

use constant Namespace/CONS_NAME;echo CONS_NAME;函數(shù)和常量的別名與類名的創(chuàng)建方式一樣。

最佳實(shí)踐

1).PHP允許在一個(gè)PHP文件中定義多個(gè)命名空間。但是這么做容易讓人困惑,違背了一個(gè)文件一個(gè)類的良好實(shí)踐。
2).在一個(gè)命名空間中引用全局的命名空間的代碼時(shí),需要加上/前綴,告訴PHP需要在全局中查找該類,例如PHP原生的異常類。

自動(dòng)加載

1).命名空間為PHP-FIG制定的PSR4自動(dòng)加載器奠定了堅(jiān)實(shí)的基礎(chǔ)。

2.使用接口

1).就像我可以選擇開(kāi)不一樣的車。因?yàn)樗麄兌加蟹较虮P、油門和剎車,并且燃料都是汽油。

3.性狀

1).性狀是類的部分實(shí)現(xiàn)(常量、屬性和方法),可以混入一個(gè)或者多個(gè)現(xiàn)有的PHP類中,性狀有兩個(gè)作用,表明類可以做什么(類似接口),提供模塊化實(shí)踐(類似類)。
2).性狀使得兩個(gè)無(wú)關(guān)的類可以使用相同屬性和方法。
3).PHP解釋器會(huì)把性狀復(fù)制粘貼到類的定義體中。

4.創(chuàng)建生成器

1).在普通函數(shù)中一次或者多次使用yield關(guān)鍵字,不返回值,只生成值,這個(gè)函數(shù)就是一個(gè)生成器。例如:

<?phpfunction myGenerator() { yield 'value1'; yield 'value2';}調(diào)用生成器函數(shù)的時(shí)候,PHP會(huì)返回一個(gè)屬于Generator類的對(duì)象,這個(gè)對(duì)象可以使用foreach()函數(shù)迭代,每次迭代,PHP會(huì)要求這個(gè)對(duì)象的實(shí)例計(jì)算并提供下一個(gè)要迭代的值,生成器的優(yōu)雅之處就是在每產(chǎn)出一個(gè)值之后,生成器內(nèi)部狀態(tài)會(huì)一直停頓和恢復(fù)之間切換,直到抵達(dá)定義體的末尾或者遇到空的return;語(yǔ)句為止,例如:

<?phpforeach (myGenerator() as $yieldedValue) { echo $yieldedValue, PHP_EOL;}以上例子會(huì)輸出

value1value22).生成器是如何節(jié)約內(nèi)存的?生成一個(gè)范圍內(nèi)的數(shù)值(錯(cuò)誤方式)

<?phpfunction makeRange($length) { $dataset = []; for ($i=0; $i < $length; $i++) { $dataset[] = $i; } return $dataset;}$customRange = makeRange(1000000);foreach ($customeRange as $i) { echo $i, PHP_EOL;}預(yù)先創(chuàng)建了一個(gè)包含很大整數(shù)組成的數(shù)組,再看使用生成器的例子。

<?phpfunction makeRange($length) { for ($i = 0; $i < $length; $i++) { yield $i; }}foreach(makeRange(1000000) as $i) { echo $i, PHP_EOL;}在實(shí)際的例如迭代一個(gè)4GB大小的文件中功能中,迭代器大展身手。

<?phpfunction getRows($file) { $handle = fopen($file, 'rb'); if ($handle === false) { throw new Exception(); } //feof()函數(shù)檢測(cè)是否到達(dá)文件末尾 while (feof($handle) === false) { //fgetcsv()一次讀取csv文件的一行 yeild fgetcsv($handle); } fclose($handle)}foreach (getRows('data.csv') as $row) { print_r($row);}
3).生成器沒(méi)有為PHP添加新功能,需要實(shí)現(xiàn)在數(shù)據(jù)集中執(zhí)行快進(jìn)、快退和查找,最好自己編寫類實(shí)現(xiàn)Iterator接口,或者使用PHP標(biāo)準(zhǔn)庫(kù)中的某個(gè)原生迭代器。
原生迭代器鏈接

關(guān)鍵詞:成器,空間,命名,特性

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉