首頁 頭條 PHP早已不是十年前的鳥樣

PHP早已不是十年前的鳥樣

May 15, 2019 pm 04:38 PM
php

開發者 Brent 發布了一篇文章,詳細介紹了 2019 年的 PHP 是怎麼樣的。

PHP早已不是十年前的鳥樣

Brent 承認PHP 目前仍然存在一些問題,例如許多核心函數仍然有不一致的方法簽名、配置設定還是令人困惑,但以他自己的開發經驗來看,他認為PHP 是Web 開發的絕佳選擇,使用PHP,他可以創建可靠、可維護和高品質的應用,並且自己與客戶對最終結果都滿意。 (推薦學習:PHP7技術專題)

文章中Brent 專注於PHP 多年來發展得好的一面,他透過幾下幾點,說明「PHP 不再是十年前那一門糟糕的語言了」:

● PHP 正在積極開發,每年都會發布新版本

● PHP 5 之後性能在不斷提高

● 有非常活躍的架構、套件和平台組成的語言生態

● PHP 在不斷發展,過去幾年中增加了許多新功能

● 各種開發工具在過去幾年中已經成熟,並且保持增長

PHP 正在積極開發,每年都會發布新版本

當前PHP 版本是去年12 月發布的7.3,7.4 預計在今年年底發布,而PHP 8.0 將是7.4 之後的下一個版本。

PHP早已不是十年前的鳥樣

自從 5.X 時代以來,核心團隊希望每年發布一個新版本,在過去四年中他們成功維護了這麼一個發布週期。通常每個新版本都會得到官方兩年時間的積極支持,之後有一年僅提供安全修復,其目的是激勵 PHP 開發人員盡可能保持更新。

PHP早已不是十年前的鳥樣

更具體的發布與維護週期可以查看PHP 官網的介紹:

https://www.php.net/supported- versions.php

看到上邊這個表,你可能會發現版本號碼從5 跳到了7,那PHP 6 去哪裡了?

順便科普一下。其實早在 2005 年,PHP 社群就發起了 PHP 6,但由於實現 Unicode 面臨的困難太大,專案最終流產,PHP 官方沒有發布 PHP 6 GA,並且在 2010 年將 PHP 6 取消。雖然 PHP 6 專案取消了,但其大量已實現功能整合到了 PHP 5.X 中,包括 OOP 方面的改進,使得 PHP 從面向過程跨越到物件導向。

PHP 6 被取消了,但之前對這個主要版本的研發都是以 PHP 6 的名義進行的,所以許多參考資料與書籍都是用「PHP 6」來指稱該版本。官方擔心這在放棄 PHP 6 之後會造成混亂,於是乾脆不使用 PHP 6.X 版本號,直接從 5 跳到 7。

詳情可以查看官方說明:

##https://wiki.php.net/rfc/php6

PHP 5 之後效能在不斷提高

PHP 7.0 中,PHP 核心部分完全重寫,帶來了最新的Zend 引擎,使得PHP 性能提升了兩到三倍。

作者引用了https://kinsta.com/blog/php-benchmarks 的基準測試來說明這一點,指出自7.0 以來,PHP 效能一直在提升,PHP Web 應用與其它語言的Web 框架相比在某些情況下性能好很多。但他也表示:「當然PHP 框架不會勝過C 與Rust,但比Rails 或Django 好得多,與ExpressJS 相當。」

有非常活躍的框架、套件和平台組成的語言生態

提到PHP 的框架,不得不說WordPress,但是作者表示WordPress 絕對不代表當前的PHP 生態:「PHP 框架再也不僅僅只有WordPress 了」。

目前 PHP 中有兩個主要的 Web 應用開發框架:Symfony 與 Laravel,還有 Zend、Yii、Cake 與 Code Igniter 這些,此外還有不少較小的框架。

Symfony 與 Laravel 都擁有龐大的套件和軟體生態,包括 admin 面板和 CRM、獨立軟體包、CI、分析器、Web socket 伺服器、佇列管理器與支付整合等。

此外,近年來 PHP 非同步框架也興起了,Swoole、Amp 與 ReactPHP 是其中的佼佼者,它們是用 PHP 或其它語言編寫的框架和伺服器,用來運行真正的非同步 PHP。

作者認為衡量 PHP 生態當前狀況的一種方法是查看 Packagist 這個 PHP 主要軟體包儲存庫的資料。透過以下趨勢圖,可以發現軟體包數量呈指數級增長,並且當前輸入軟體包有 223 217 個,總的安裝量達到了 14 827 204 847,PHP 生態已不再像以前那麼弱小。

PHP早已不是十年前的鳥樣

各種版本的可用軟體包的數量

PHP早已不是十年前的鳥樣

#每月包被安裝數

PHP早已不是十年前的鳥樣

此外,您還可以看看PHP 使用統計與市場定位最新數據:

#http://www.php.cn/toutiao-418943.html

PHP 在不斷發展,過去幾年中添加了許多新特性

儘管async 與await 這兩個呼聲極高的特性還沒有實現,但是PHP 這幾年新特性不斷出現,語言本身也得到了各方面的改進。

下邊列出了一些關注度比較高的PHP 新特性:

#● Short closures

短閉包,也稱為箭頭函數,這是一種在PHP 中編寫較短函數的方法。將閉包傳遞給 array_map 或 array_filter 等函數時,它可以發揮極大的作用。

// A collection of Post objects $posts = [/* … */];
$ids = array_map(fn($post) => $post->id, $posts);
登入後複製

● Null coalescing operator

空白合併運算符,它類似於三元運算符,但左邊的運算元行為類似於isset,而不是只使用其布林值。這使得此運算子對數組特別有用。它同時可在未設定變數時分配預設值。

$undefined ?? 'fallback'; // 'fallback'
$unassigned;
$unassigned ?? 'fallback'; // 'fallback'
$assigned = 'foo';
$assigned ?? 'fallback'; // 'foo'
'' ?? 'fallback'; // ''
'foo' ?? 'fallback'; // 'foo'
'0' ?? 'fallback'; // '0'
0 ?? 'fallback'; // 0
false ?? 'fallback'; // false
登入後複製

● Traits

Trait 是重複使用程式碼的機制,它可以減少單一繼承的某些限制。 Traits 與類別組合的語意定義了降低複雜性的方式,並避免了與多重繼承和 Mixins 相關的典型問題。

Trait 類似於類,但僅用於以細粒度和一致的方式對函數進行分組,它是對傳統繼承的補充,可以實現行為的橫向組合,類成員應用不需要繼承。

<?php
trait ezcReflectionReturnInfo {
    function getReturnType() { /*1*/ }
    function getReturnDescription() { /*2*/ }
}
class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}
class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
}
?>
登入後複製

● Typed properties

屬性類型化,類別變數可以定義類型,例如:

class A
{
    public string $name;
    
    public Foo $foo;
}
登入後複製

● Spread operator

擴充運算符,這是一種新語法,可以直接在呼叫中解壓縮參數,例如:

call_user_func_array([$db, &#39;query&#39;], array_merge(array($query), $params));
登入後複製

直接用新語法可擴充出陣列$params:

$db->query($query, ...$params);
登入後複製

● JIT compiler:PHP 8 中確認支援JIT

#JIT 是一種編譯器策略,它將程式碼表述為一種中間狀態,在執行時間將其轉換為依賴體系結構的機器碼,並即時執行。在PHP 中,這意味著JIT 將為Zend VM 產生的指令視為中間表述,並以依賴體系結構的機器碼執行,也就是說託管程式碼的不再是Zend VM,而是更為底層的CPU 。

● FFI

Foreign Function Interface,外部函數接口,它允許從純腳本語言調用C 函數、使用C 資料類型,從而更有效地開發「系統代碼」。對於 PHP,FFI 開啟了一種使用純 PHP 編寫 PHP 擴充功能和綁定到 C 函式庫的方法。

● Anonymous classes

匿名類,用於建立簡單的一次性物件:

<?php
// Pre PHP 7 code
class Logger
{
    public function log($msg)
    {
        echo $msg;
    }
}
$util->setLogger(new Logger());
// PHP 7+ code
$util->setLogger(new class {
    public function log($msg)
    {
        echo $msg;
    }
});
登入後複製

● Return type declarations

宣告回傳類型:

<?php
function sum($a, $b): float {
    return $a + $b;
}
// Note that a float will be returned.
var_dump(sum(1, 2));
?>
登入後複製

嚴格模式:

<?php
declare(strict_types=1);
function sum($a, $b): int {
    return $a + $b;
}
var_dump(sum(1, 2));
var_dump(sum(1, 2.5));
?>
登入後複製

● Contemporary cryptography

##讓Libsodium 成為核心擴展,Libsodium 是一個現代加密庫,由安全專家精心選擇的加密演算法組成,以避免側通道漏洞。

● Generators

#產生器,提供了一個簡單、無樣板實作迭代器的方法。

各種開發工具在過去幾年中已經成熟,並且保持成長

最後一部分,作者分析了當前 PHP 開發工具也在不斷成熟,並且保持成長。

他以靜態分析器為例,例如 Psalm、Phan 與 PHPStan,這些工具將靜態分析 PHP 程式碼並報告任何類型錯誤與可能存在的 bug。在某種程度上,它們提供的功能可以與 TypeScript 的功能相媲美,但因為 PHP 現在不提供轉換(transpile),所以不允許使用自訂語法。這意味著 PHP 開發需要依賴文檔,但其實 PHP 的創造者 Rasmus Lerdorf 曾經提到了向核心添加靜態分析引擎的想法。

受到 JavaScript 社区的启发,目前 PHP 也有在进行转换的相关研发,比如项目 Pre,它允许新的 PHP 语法转换为普通的 PHP 代码。虽然这个想法已经在 JavaScript 中被证明可行,但作者认为在 PHP 中,只有先提供了适当的 IDE 和静态分析支持,它才有可能实现。

讲完了 PHP 当前的这些变化,作者最后没有以“PHP 是世界上最好的语言”作结语,相反,他是这样说的:

All that being said, feel free to still think of PHP as a crappy language... I can say in confidence that I enjoy working with it.
登入後複製

话虽如此,但是还要继续认为 PHP 是蹩脚的语言那也是可以的。我可以很自信地说我喜欢 PHP。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

我後悔之前不知道的 7 個 PHP 函數 我後悔之前不知道的 7 個 PHP 函數 Nov 13, 2024 am 09:42 AM

如果您是經驗豐富的PHP 開發人員,您可能會感覺您已經在那裡並且已經完成了。操作

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。