PHP 新特性

命名空間 namespace

其作用是按照一種虛擬的層次結構組織PHP代碼,現(xiàn)代PHP組件和框架都放在各自全局唯一的廠商命名空間中俄占,以避免常見類名沖突。命名空間還是PSR-4 自動加載的基礎

<?php
// 聲明命名空間
namespace Symfony\Component\HttpFoundation

// 導入
use Symfony\Component\HttpFoundation\Response;

$response = new Response('Oops',400);
$respons->send();

接口 interface

使用接口編寫的代碼更靈活食听,能委托別人實現(xiàn)細節(jié)奸披。

<?php
// 定義接口方法
interface Doumentable{
    public function getId();
    public function getContent();
}
<?php
// 接口方法實現(xiàn)1
class HtmlDocument implements Documentable
{
    protected $url;

    public function __construct($url)
    {
        $this->url = $url;
    }

    public function getId()
    {
        return $this->url;
    }

    public function getContent()
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $html = curl_exec($ch);
        curl_close($ch);
        return $html;
    }
}
<?php
// 接口方法實現(xiàn)2
class StreamDocument implements Documentable
{
    protected $resource;
    protected $buffer;

    public function __construct($resource, $buffer = 4096)
    {
        $this->resource = $resource;
        $this->buffer = $buffer;
    }

    public function getId()
    {
        return 'resource-' . (int)$this->resource;
    }

    public function getContent()
    {
        $steamContent = '';
        rewind($this->resource);
        while (feof($this->resource) == false) {
            $steamContent .= fread($this->resource, $this->buffer);
        }
        return $steamContent;
    }
}

性狀 trait

性狀是類的部分實現(xiàn)(即常量,屬性和方法),可以混入一個或多個現(xiàn)有PHP類中视哑。性狀有兩個作用:表明類可以做什么(像是接口)绣否;提供模塊化實現(xiàn)(像是類)。
性狀能把模塊化的實現(xiàn)方式注入多個物管的類中挡毅,而且還能促進代碼重用蒜撮。

<?php
// 創(chuàng)建形狀
trait MyTrait
{
    //這里是性狀
}
<?php
class MyClass
{
    use MyTrait;
    // 這里是類的實現(xiàn)
    // 注意:命名空間use 在定義體外,性狀在定義體內
}

生成器 generators

與標準的PHP迭代器不同慷嗜,PHP生成器不要求實現(xiàn)Iterator接口淀弹,從而減輕了類的負擔。生成器會根據(jù)需求計算并產(chǎn)生要迭代的值庆械,不需要占用寶貴的內存薇溃,有助于優(yōu)化性能。
注意:生成器只產(chǎn)出值缭乘,沒有返回值沐序。無法后退或者快進。而且還是一次性的堕绩,無法多次迭代同一個迭代器策幼。不過,如果需要奴紧,可以重建或者克隆生成器特姐。

<?php
// 生成器生成一個范圍數(shù)值
// 一次只會為一個整數(shù)分配內存
function makeRange($length)
{
    for ($i = 0; $i < $length; $i++) {
        yield $i;
    }
}

foreach (makeRange(1000000) as $i) {
    echo $i, PHP_EOL;
}
<?php
// 使用生成器處理csv文件
// 每次只會為csv文件中的一行分配內存,不會把整個文件讀入內存中黍氮,適合讀取超大的文件
function getRow($file)
{
    $handle = fopen($file, 'rb');
    if ($handle == false) {
        throw new \Exception();
    }
    while (feof($handle) === false) {
        yield fgetcsv($handle);
    }
    fclose($handle);
}

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

閉包 closure

閉包是指創(chuàng)建時封裝周圍狀態(tài)的函數(shù)唐含。匿名還是是指沒有名稱的函數(shù)。
理論上閉包和匿名函數(shù)是不同的概念沫浆,但是PHP將其視作相同的概念捷枯。

<?php
// 創(chuàng)建簡單的閉包
$closure = function ($name) {
    return sprintf('hello %s', $name);
};
echo $closure("John");
// 輸出 --> "hello John"
<?php
 // 使用use附加狀態(tài)
function enclosePerson($name)
{
    return function ($doCommond) use ($name) {
        return sprintf('%s,%s', $name, $doCommond);
    };
}
// 把字符串 clay 封裝到閉包中
$caly = enclosePerson('Clay');
// 傳入?yún)?shù),調用閉包
echo $caly('get me sweet tea');

字節(jié)碼緩存 Zend OPcache

PHP 是解釋型語言专执,PHP解析器執(zhí)行PHP腳本時會解析PHP腳本代碼淮捆,把PHP代碼編譯成一系列Zend操作碼,然后執(zhí)行字節(jié)碼本股。每次HTTP請求都必須不斷解析攀痊,編譯和執(zhí)行PHP腳本,會消耗很多資源拄显。字節(jié)碼緩存能存儲先編譯號的PHP字節(jié)碼蚕苇,請求PHPj腳本時PHP解析器會沖內存中讀取預先編譯好的字節(jié)碼,然后執(zhí)行凿叠。只有能節(jié)省時間涩笤,極大地提高性能嚼吞。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蹬碧,隨后出現(xiàn)的幾起案子舱禽,更是在濱河造成了極大的恐慌,老刑警劉巖恩沽,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件誊稚,死亡現(xiàn)場離奇詭異,居然都是意外死亡罗心,警方通過查閱死者的電腦和手機里伯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渤闷,“玉大人疾瓮,你說我怎么就攤上這事§” “怎么了狼电?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長弦蹂。 經(jīng)常有香客問我肩碟,道長,這世上最難降的妖魔是什么凸椿? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任削祈,我火速辦了婚禮,結果婚禮上脑漫,老公的妹妹穿的比我還像新娘髓抑。我一直安慰自己,他們只是感情好窿撬,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叙凡,像睡著了一般劈伴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上握爷,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天跛璧,我揣著相機與錄音,去河邊找鬼新啼。 笑死追城,一個胖子當著我的面吹牛,可吹牛的內容都是我干的燥撞。 我是一名探鬼主播座柱,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼迷帜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了色洞?” 一聲冷哼從身側響起戏锹,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎火诸,沒想到半個月后锦针,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡置蜀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年奈搜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盯荤。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡馋吗,死狀恐怖,靈堂內的尸體忽然破棺而出廷雅,到底是詐尸還是另有隱情耗美,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布航缀,位于F島的核電站商架,受9級特大地震影響,放射性物質發(fā)生泄漏芥玉。R本人自食惡果不足惜蛇摸,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望灿巧。 院中可真熱鬧赶袄,春花似錦、人聲如沸抠藕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盾似。三九已至敬辣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間零院,已是汗流浹背溉跃。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留告抄,地道東北人撰茎。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像打洼,于是被迫代替她去往敵國和親龄糊。 傳聞我的和親對象是個殘疾皇子逆粹,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內容