Magic for Artisan (1) - Facade

Magic for Artisan 是一個系列的文章,在這系列的文章中,我們將探討 Laravel 是如何使用到各種 PHP 的動態 (Dynamic) 特性。雖然這些動態的部分被許多人所詬病,但筆者作為 Laravel 的粉絲,對於這些功能抱持著正面的態度,希望透過這一系列的文章能讓大家更瞭解 Laravel 的運作原理。 初次接觸 Laravel 的人一定有遇過這樣的狀況:手冊上叫你呼叫 Request::input('foo');,但是我們打開 \Illuminate\Support\Facades\Request,卻發現這個 Class 上根本沒實作 input 方法! 許多人想,既然 Request Class 上沒有,那我們看看他的上層 (Parent) Class,應該就可以找到了吧!? Request 的上層方法是 Illuminate\Support\…

移除 Composer 中不需要的 Polyfill

預設在安裝 Laravel(或其他框架 / Library)時,常常或多或少會一併安裝許多的「Polyfill」。這些 Polyfill 往往是不必要的。本文說明了如何檢視目前已安裝的 Polyfill,以及如何在專案中移除這些 Polyfill。 Polyfill? 什麼是 Polyfill 呢?Polyfill 是一段用來讓程式能使用還未實作或在為安裝特定套件時使用特定功能的一段程式碼。 舉例來說,Symfony 維護了針對各個 PHP 版本中新增函式的 Polyfill。。在 symfony/polyfill-php81 中,提供了 array_is_list 方法,讓我們不需要安裝 PHP 8.1 也能通過 require 這個 Package 來使用該方法。 使用 composer info 來看看我們安裝了哪些 Polyfill 我們可以使用…

Composer 與 Autoload

相信大家都有在用 Composer,但許多初學者只知道 Composer 可以安裝套件,卻不知道為什麼需要用 Composer、以及 Composer 解決了什麼問題。在這篇文章中,我們將會討論 1. Package Manager 是做什麼的? 2. PHP 中的 Autoload 是什麼? 什麼是 Package Manager? Package Manager (套件管理員),從名字上來看,他是用來安裝套件的。大家熟悉的 Package Manager 除了 Composer 外,還有 NPM (node.js)、Homebrew (macOS)、APT (Debian)、DNF (RHEL) 等常見的 Package Manager。 除了安裝你指定的套件外,這些…