国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHP 5.5.0 Release note- support Zend OPcache

2020-03-22 18:08:29
字體:
來源:轉載
供稿:網友
  • PHP 5.5.0 在上周 20 號正式 Release,也看到 PHP 網址終于改版了,新的版面看起來比較清爽,想嘗試新版面的朋友們,可以點選網址最上面鎖提示的 Bar,如果覺得新版面不是很好看,也可以切回去舊版。本篇來介紹 PHP 5.5.0 有哪些新 Feature。

    新增 generators and coroutines 功能
    Generators 提供了最簡單的寫法來實做 iterators,而不需要實做 Class 去實做 Iterator 接口,generators function 就跟一般的 PHP function 一樣,只是多了 yield 這 keyword,簡單舉個例子

    <?phpfunction gen_one_to_three() {    for ($i = 1; $i <= 3; $i++) {        // Note that $i is preserved between yields.        yield $i;    }}$generator = gen_one_to_three();foreach ($generator as $html' target='_blank'>value) {    echo "$value/n";}?>

    雖然有了 generators,但是我們可以來比較看看 generators 和 Iterator objects 的差異,網址例子來解釋開啟檔案的程序代碼

    <?phpfunction getLinesFromFile($fileName) {    if (!$fileHandle = fopen($fileName, 'r')) {        return;    }     while (false !== $line = fgets($fileHandle)) {        yield $line;    }     fclose($fileHandle);}// versus...class LineIterator implements Iterator {    protected $fileHandle;     protected $line;    protected $i;     public function __construct($fileName) {        if (!$this->fileHandle = fopen($fileName, 'r')) {            throw new RuntimeException('Couldn/'t open file "' . $fileName . '"');        }    }     public function rewind() {        fseek($this->fileHandle, 0);        $this->line = fgets($this->fileHandle);        $this->i = 0;    }     public function valid() {        return false !== $this->line;    }     public function current() {        return $this->line;    }     public function key() {        return $this->i;    }     public function next() {        if (false !== $this->line) {            $this->line = fgets($this->fileHandle);            $this->i++;        }    }     public function __destruct() {        fclose($this->fileHandle);    }}?>

    兩者差異其實很清楚,如果是用 generators,是無法回復上一步驟,但是如果是用 Class 寫法,就可以重復使用,只需要宣告一次即可,但是 generators 就必需要一直呼叫 function 來使用。

    新增 finally keyword
    直接來看網址的例子比較清楚

    <?phpfunction inverse($x) {    if (!$x) {        throw new Exception('Division by zero.');    }    return 1/$x;}try {    echo inverse(5) . "/n";} catch (Exception $e) {    echo 'Caught exception: ',  $e->getMessage(), "/n";} finally {    echo "First finally./n";}try {    echo inverse(0) . "/n";} catch (Exception $e) {    echo 'Caught exception: ',  $e->getMessage(), "/n";} finally {    echo "Second finally./n";}// Continue executionecho "Hello World/n";?>

    上面執行后會輸出

    0.2First finally.Caught exception: Division by zero.Second finally.Hello World

    finally try cache 執行完畢后一定會執行到 finally block,另外在留言部份有個例子也很棒

    <?phptry{        try {                throw new /Exception("Hello");        } catch(/Exception $e) {                echo $e->getMessage()." catch in/n";                throw $e;        } finally {                echo $e->getMessage()." finally /n";                throw new /Exception("Bye");        }} catch (/Exception $e) {        echo $e->getMessage()." catch out/n";}?>

    新增 Password Hashing API

    password hashing API 提供了 crypt() 算法加密,所以現在不用自己寫 Password hash 了,直接使用 PHP 內建吧

    <?php
    echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."/n";輸出為

    $2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a如果使用 CRYPT 算法

    <?php/** * In this case, we want to increase the default cost for BCRYPT to 12. * Note that we also switched to BCRYPT, which will always be 60 characters. */$options = [    'cost' => 12,];echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."/n";?>

    輸出為

    $2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K

    那該如何驗證使用者登入密碼正確呢?可以透過 password_verify function

    <?php// See the password_hash() example to see where this came from.$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';if (password_verify('rasmuslerdorf', $hash)) {    echo 'Password is valid!';} else {    echo 'Invalid password.';}?>

    empty() supports arbitrary expressions
    empty() 開始支持 function return value,不只是判斷變量而已。

    <?phpfunction always_false() {    return false;}if (empty(always_false())) {    echo "This will be printed./n";}if (empty(true)) {    echo "This will not be printed./n";}?>

    如果在 5.5 版本以前就會噴

    PHP Fatal error: Can’t use function return value in write context

    支援 ::class keyword
    5.5 開始支持 Class name resolution

    <?php
    namespace NS {
    class ClassName {
    }

    echo ClassName::class;
    }
    ?>

    上述輸出為

    NS/ClassNameforeach 支持階乘式數組
    <?php
    $array = [
    [1, 2],
    [3, 4],
    ];

    foreach ($array as list($a, $b)) {
    // $a contains the first element of the nested array,
    // and $b contains the second element.
    echo "A: $a; B: $b/n";
    }
    ?>

    輸出為

    A: 1; B: 2
    A: 3; B: 4真的是太強大了。

    內建 Zend OPcache
    本篇重點就是 5.5 開始內建 Zend OPcache,在之前要 tune php performance,無非就是加上 APC,為了改善 cache 效能,Zend 官方又寫了一套 ZendOptimizerPlus,將 PHP 編譯程 bytecode 存放在 shared memory,此方式避免到硬盤讀取 PHP 程序代碼,并且編譯再執行。www.it165.net

    目前支持 PHP 5.2.*, 5.3.*, 5.4.* and PHP-5.5,但是也許 PHP 5.2.* 將來會拔掉,但是這還沒確定。如果您的系統是 php5.5 以前的版本,可以透過 pecl 方式來安裝

    # support Zend OPcache on PHP 5.2, 5.3 and 5.4
    pecl install channel://pecl.php.net/ZendOpcache-7.0.2完成后新增設定檔 /etc/php5/cli/conf.d/10-opcache.ini

    zend_extension=opcache.so

    [opcache]
    opcache.memory_consumption=128
    opcache.interned_strings_buffer=8
    opcache.max_accelerated_files=4000
    opcache.revalidate_freq=60
    opcache.fast_shutdown=1
    opcache.enable_cli=1

    需要注意的是 opcache.revalidate_freq 設定,預設是2秒,也就是兩秒內 opcache 不會去偵測程序代碼是否有修改,如果正在開發狀態,并且搭配 Livereload 的話,使用 opcache 請把 revalidate_freq 設定為 0,讓每次 reload 都重新偵測程序代碼是否改變。

    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 博白县| 龙海市| 南开区| 长泰县| 常熟市| 平乐县| 长沙县| 西城区| 方城县| 陆丰市| 碌曲县| 前郭尔| 镇沅| 金坛市| 观塘区| 元谋县| 彭州市| 祁阳县| 揭阳市| 连山| 涡阳县| 丰台区| 北票市| 姜堰市| 南宁市| 平南县| 福海县| 巩留县| 甘肃省| 晋城| 杭州市| 嫩江县| 敖汉旗| 广平县| 六枝特区| 长岛县| 高雄县| 曲阜市| 南投县| SHOW| 大同市|