Please enable JavaScript.
Coggle requires JavaScript to display documents.
PHP (質量度量 (PhpLoc 程式碼統計, PHPMD (PHP Mess Detector) 找尋可能的錯誤, PHP-CS-Fixer…
PHP
質量度量
PhpLoc 程式碼統計
PHPMD (PHP Mess Detector) 找尋可能的錯誤
PHP-CS-Fixer 撰碼標準修正工具
PHPCPD (PHP Copy past detector)
PHPMND (PHP Magic Number Detector)
PHPCS (PHP CodeSniffer) 檢查是否違法撰碼規範
PhpCodeFixer
PhpMetrics
churn-php
dePHPend 相依分析
PHPStan 靜態分析工具
php_testability靜態分析工具
語法
資料型態
bool
int
float
string
resource
null
callable
又被稱為 Callback
函數編程
Closure
又稱為 Anonymous Function
箭头函数(Arrow functions)是用隐式的按值范围绑定定义函数的简写方法
Arrow functions
FFI(Foreign Function Interface)
PHP7.4+
调用C代码
錯誤處理
Throwable
Error
Exception
運算子
??=
沒有指定值則使用指定的作為預設值
trait
yield
物件導向
Stream
Magic Method
Modern PHP
程式使用 composer
Coding Style 遵守 PSR-12
PHP 版本規劃
具備測試
應該優先以物件導向程式設計的模式實作
佈署
Roadrunner
Golang 寫的 PHP Web Server
不需要啟用 FastCGI
相容於 PSR-7
無法使用die/exit
Linux+Apache+PHP
Linux+Nginx+PHP
Windows+IIS+PHP
Swoole
規範
PSR:PHP Standards Recommendations
PSR-12
擴展的 Coding Style 指南
PSR-7
HTTP 訊息介面
PSR-15
由非官方委員會 PHP-FIG 所提出的一系列標準
PSR-4
Autoloader 標準
PSR-3
Logger 介面
Composer 管理套件
Type Hint
Exception
PHP Runtime
Swoole
RoadRunner+PHP
nginx/apache+php-fpm
php development server
Profiling
Xdebug
只適合用於開發環境
極大影響運行效能
XHProf
Blackfire
Swoole Tracker
性能
PHP7: VM重構
PHP8: JIT
Swoole4/RoadRunner 記憶體常駐
Preload
配置: php.ini
配置
memory_limit
max_execute_time
file_uploads
upload_max_filesize
max_file_uploads
post_max_size
ouput_buffering
realpath_cache_size
realpath_cache_ttl
使用 psecio/iniscan 來掃瞄既有的 ini 檔案是否存在安全風險
建議
記憶體
記憶體限制最高為主機的 50%
若值低於 128M 以 128M 為最底限
可用 php-fpm memory cost * php-fpm process count 去優化這個值
執行時間
最長執行時間不應超過 30 秒
超過 30 秒應該用 MQ 去解決
上傳資料大小
max_post_size > upload_max_filesize * max_file_upload
線上環境中,實際路徑快取務必要設定
Framework
挑選原則
支援 composer
支援 PHP 7+
分類
包山包海型
Laravel
優點:良好的設計模式與規範、簡明的開發文件、龐大的社群
缺點:過度封裝與部份功能使其效率較低
Phalcon
優點:壓倒性的效能
缺點:需要額外 extension 支援,造成開發時的難度比一般 PHP 要高
採用 Zephir 編寫
提升 PHP extension 撰寫效率時所建立的程式語言,其底層為 C
Symfony
優點:支援性全面的元件、詳盡到會迷路的開發文件、良好的社群與公司支援
缺點:開發難度稍高、全家餐體積龐大
設計思想來自於 Java Spring
微框架型
Lumen
優點:擁有 Laravel 的優勢但(據稱)速度更快,載入的元件較少
缺點:套件支持度不一,受到的關注度遠小於 Laravel
Phalcon Micro
優點:壓倒性的效能(比 Phalcon 更快)
缺點:需要自行安裝 Phalcon extension,無法使用 Dependency Injection
Slim
優點:精簡的元件、良好的設計、高度可整併性
Console Application 型
Laravel Zero
優點:相似於 Laravel 的使用方法,但它並不是 Laravel 官方的專案
缺點:文件過於簡陋,且 Laravel 既有套件幾乎不支援
Symfony Console
優點:想得到的 Console 操作,基本上 Symfony 都已經完美封裝。
缺點:學習曲線有點陡峭,因元件上與 Web 有所不同,API 幾乎都要另外查閱。
單元測試
PHPUnit
快取機制
Opcache
php.ini
opcache.memory_consumption
儲存 opcodes 時會使用到多少記憶體
使用 opcache_get_status() 看到目前使用多少記憶體來儲存 opcodes
要比 opcache_get_status() 所得到的值再大一些才有意義
單位是 MB
opcahce.interned_strings_buffer
單位是 MB
將已經出現過的字串儲存於一塊記憶體中
讓各 php-fpm 能夠共享一塊指定大小的 buffer 來改善性能
opcache.max_accelerated_files
可以快取多少 PHP 檔案
要比專案中所有的檔案數量總合要大
vendor/ 下的也要一併計算進去
opcahce.revalidate_freq = 0
多久(單位為秒)檢查一次 PHP 檔案是否有變化
opcache.validate_timestamps
決定是否在一段時間後檢查 PHP 檔是否有變化
為 1,它會在每幾秒去確定 PHP 檔案是否發生變化
開發環境
為 0,它永遠不會去確定 PHP 檔案是否變化
生產環境