最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP新特性詳解之命名空間、性狀與生成器

 更新時間:2017年07月18日 11:39:27   作者:xx19941215  
這篇文章主要給大家介紹了關(guān)于PHP新特性之命名空間、性狀與生成器的相關(guān)資料,主要涉及到php中trait(性狀)與generator(生成器) 方面的內(nèi)容,對于php中trait(性狀)與generator(生成器) 感興趣的同學(xué)可以參考一下。

本文主要跟大家介紹了關(guān)于PHP新特性之命名空間、性狀與生成器的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面來一起看看詳細(xì)的介紹:

1.命名空間

命名空間是什么?

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

     2).命名空間始終應(yīng)該在<?php標(biāo)簽的下面一行。

     3).PHP文件的命名空間和操作系統(tǒng)的物理文件系統(tǒng)不同,這是一個虛擬的概念,沒有必要和文件系統(tǒng)的目錄結(jié)構(gòu)完全對應(yīng)。雖然如此,絕大多數(shù)PHP組件為了兼容廣泛使用的PSR4自動加載標(biāo)準(zhǔn),會把子命名空間放到文件系統(tǒng)的子目錄中去。

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

為什么需要命名空間?

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

聲明命名空間

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

導(dǎo)入和別名

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

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

從PHP5.6開始我們可以導(dǎo)入函數(shù)和常量。

<?php
use func Namespace\functionName;

functionName();

也可以導(dǎo)入常量,

use constant Namespace\CONS_NAME;
echo CONS_NAME;

函數(shù)和常量的別名與類名的創(chuàng)建方式一樣。

最佳實踐

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

自動加載

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

2.使用接口

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

3.性狀

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

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

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

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

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

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

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

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

以上例子會輸出

value1
value2

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

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;
}

預(yù)先創(chuàng)建了一個包含很大整數(shù)組成的數(shù)組,再看使用生成器的例子。

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()函數(shù)檢測是否到達文件末尾
 while (feof($handle) === false) {
 //fgetcsv()一次讀取csv文件的一行
 yield fgetcsv($handle);
 }
 fclose($handle)
}

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

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

原生迭代器鏈接

總結(jié)

以上就是這篇文章的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • PHP延遲靜態(tài)綁定的深入講解

    PHP延遲靜態(tài)綁定的深入講解

    這篇文章主要給大家介紹了關(guān)于PHP延遲靜態(tài)綁定的相關(guān)資料,這是最近工作中遇到的一個功能,通過查找相關(guān)的資料整理了這篇文章,分享出來供大家參考學(xué)習(xí),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • PHP設(shè)計模式之組合模式定義與應(yīng)用示例

    PHP設(shè)計模式之組合模式定義與應(yīng)用示例

    這篇文章主要介紹了PHP設(shè)計模式之組合模式定義與應(yīng)用,結(jié)合實例形式詳細(xì)分析了PHP組合模式基本原理、定義與使用方法,需要的朋友可以參考下
    2020-02-02
  • php 刪除目錄下N分鐘前創(chuàng)建的所有文件的實現(xiàn)代碼

    php 刪除目錄下N分鐘前創(chuàng)建的所有文件的實現(xiàn)代碼

    以下是對php中刪除目錄下N分鐘前創(chuàng)建的所有文件的實現(xiàn)代碼進行了分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • php中隨機函數(shù)mt_rand()與rand()性能對比分析

    php中隨機函數(shù)mt_rand()與rand()性能對比分析

    這篇文章主要介紹了php中隨機函數(shù)mt_rand()與rand()性能對比分析,較為詳細(xì)的分析了兩個函數(shù)的具體用法,并以實例形式分析了在不同平臺下的運行效率問題,需要的朋友可以參考下
    2014-12-12
  • laravel創(chuàng)建類似ThinPHP中functions.php的全局函數(shù)

    laravel創(chuàng)建類似ThinPHP中functions.php的全局函數(shù)

    最近在學(xué)習(xí)如何使用Laravel寫東西,因為框架本身的設(shè)計理念的不同,剛從ThinPHP3切換到Laravel5,感覺還是很怪的,各種不習(xí)慣,但是一旦寫過一些代碼,發(fā)現(xiàn)Laravel真的非常好用。這篇文章給大家分享的是利用laravel創(chuàng)建類似ThinPHP中functions.php的全局函數(shù)。
    2016-11-11
  • php常用ODBC函數(shù)集(詳細(xì))

    php常用ODBC函數(shù)集(詳細(xì))

    本篇文章是對php中的常用ODBC函數(shù)進行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP的加密方式及原理

    PHP的加密方式及原理

    有興趣研究了一下PHP的加密方式及原理,說白了算不上加密,只是用了URL編碼和BASE64編碼的轉(zhuǎn)換
    2012-06-06
  • 探尋PHP腳本不報錯的原因

    探尋PHP腳本不報錯的原因

    PHP程序錯誤一般有三種:語法錯誤,運行時錯誤,邏輯錯誤。
    2014-06-06
  • 教你識別簡單的免查殺PHP后門

    教你識別簡單的免查殺PHP后門

    這類后門讓網(wǎng)站、服務(wù)器管理員很是頭疼,經(jīng)常要換著方法進行各種檢測,而很多新出現(xiàn)的編寫技術(shù),用普通的檢測方法是沒法發(fā)現(xiàn)并處理的。今天我們細(xì)數(shù)一些有意思的PHP一句話木馬。
    2015-09-09
  • 分析php://output和php://stdout的區(qū)別

    分析php://output和php://stdout的區(qū)別

    本篇文章給大家詳細(xì)分析了php://output和php://stdout的用法區(qū)別以及實例代碼分享,有需要的朋友可以參考學(xué)習(xí)下。
    2018-05-05

最新評論

云林县| 武清区| 桓仁| 蒲城县| 青岛市| 南乐县| 霸州市| 禹城市| 福建省| 盱眙县| 广东省| 桐乡市| 高阳县| 彭州市| 阳谷县| 东乡| 潼南县| 东平县| 峨眉山市| 宜都市| 福清市| 清远市| 东阳市| 简阳市| 平潭县| 托克托县| 富蕴县| 华容县| 丹东市| 四川省| 措美县| 新津县| 资阳市| 六枝特区| 吉安县| 台北县| 饶河县| 饶平县| 伊川县| 临江市| 仙桃市|