中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中命名空間、性狀與生成器的示例分析

發布時間:2021-08-06 09:48:34 來源:億速云 閱讀:116 作者:小新 欄目:開發技術

小編給大家分享一下PHP中命名空間、性狀與生成器的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1.命名空間

命名空間是什么?

     1).命名空間在PHP 5.3中被引入,類似于文件夾的功能。例如Symfony框架中的Request和Response,位于Symfony的命名空間下。

     2).命名空間始終應該在<?php標簽的下面一行。

     3).PHP文件的命名空間和操作系統的物理文件系統不同,這是一個虛擬的概念,沒有必要和文件系統的目錄結構完全對應。雖然如此,絕大多數PHP組件為了兼容廣泛使用的PSR4自動加載標準,會把子命名空間放到文件系統的子目錄中去。

     4).命名空間只是PHP語言的一種記號,PHP解釋器會將這種記號作為前綴添加到類、接口、函數和常量的名稱前面。

為什么需要命名空間?

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

聲明命名空間

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

導入和別名

     1).從PHP5.3開始可以導入PHP類、接口和其他命名空間,并為其創建別名。從PHP5.6開始可以導入PHP函數和常量,并為其創建別名。

     2).使用use關鍵字導入代碼時無須在開頭加上符號,因為PHP假定導入的是完全限定命名空間。use關鍵字必須出現在全局作用域中即不能出現在類或者函數中,因為這個關鍵字是在編譯的時候使用的,不過,use關鍵字可以在命名空間聲明語句后使用,導入其他命名空間的代碼。

從PHP5.6開始我們可以導入函數和常量。

<?php
use func Namespace\functionName;

functionName();

也可以導入常量,

use constant Namespace\CONS_NAME;
echo CONS_NAME;

函數和常量的別名與類名的創建方式一樣。

最佳實踐

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

自動加載

      1).命名空間為PHP-FIG制定的PSR4自動加載器奠定了堅實的基礎。

2.使用接口

      1).就像我可以選擇開不一樣的車。因為他們都有方向盤、油門和剎車,并且燃料都是汽油。

3.性狀

      1).形狀是類的部分實現(常量、屬性和方法),可以混入一個或者多個現有的PHP類中,性狀有兩個作用,表明類可以做什么(類似接口),提供模塊化實踐(類似類)。

      2).性狀使得兩個無關的類可以使用相同屬性和方法。

      3).PHP解釋器會把性狀復制粘貼到類的定義體中。

4.創建生成器

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

<?php
function myGenerator() {
 yield 'value1';
 yield 'value2';
}

調用生成器函數的時候,PHP會返回一個屬于Generator類的對象,這個對象可以使用foreach()函數迭代,每次迭代,PHP會要求這個對象的實例計算并提供下一個要迭代的值,生成器的優雅之處就是在每產出一個值之后,生成器內部狀態會一直停頓和恢復之間切換,直到抵達定義體的末尾或者遇到空的return;語句為止,例如:

<?php
foreach (myGenerator() as $yieldedValue) {
 echo $yieldedValue, PHP_EOL;
}

以上例子會輸出

value1
value2

2).生成器是如何節約內存的?生成一個范圍內的數值(錯誤方式)

function makeRange($length) {
 $dataset = [];
 for ($i=0; $i < $length; $i++) {
 $dataset[] = $i;
 }
 return $dataset;
}

$customRange = makeRange(1000000);
foreach ($customeRange as $i) {
 echo $i, PHP_EOL;
}

預先創建了一個包含很大整數組成的數組,再看使用生成器的例子。

function makeRange($length) {
 for ($i = 0; $i < $length; $i++) {
 yield $i;
 }
}

foreach(makeRange(1000000) as $i) {
 echo $i, PHP_EOL;
}

在實際的例如迭代一個4GB大小的文件中功能中,迭代器大展身手。

function getRows($file) {
 $handle = fopen($file, 'rb');
 if ($handle === false) {
 throw new Exception();
 }
 //feof()函數檢測是否到達文件末尾
 while (feof($handle) === false) {
 //fgetcsv()一次讀取csv文件的一行
 yield fgetcsv($handle);
 }
 fclose($handle)
}

foreach (getRows('data.csv') as $row) {
 print_r($row);
}

3).生成器沒有為PHP添加新功能,需要實現在數據集中執行快進、快退和查找,最好自己編寫類實現Iterator接口,或者使用PHP標準庫中的某個原生迭代器。

以上是“PHP中命名空間、性狀與生成器的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

清河县| 汝南县| 儋州市| 阜康市| 河西区| 涞源县| 彰化县| 澄迈县| 罗甸县| 常熟市| 栾城县| 上饶市| 汾阳市| 宜都市| 景宁| 眉山市| 杂多县| 靖西县| 民和| 罗山县| 怀柔区| 临猗县| 宜丰县| 梓潼县| 阿合奇县| 三原县| 华池县| 唐山市| 亚东县| 正安县| 商丘市| 余姚市| 天柱县| 漳州市| 原平市| 巴塘县| 青浦区| 绥阳县| 长岭县| 巴青县| 长春市|