2021 年 11 月底, PHP 8.1 釋出了。每次釋出新版本時,官方總是不外乎地會宣稱新版本的執行速度提升了。可是到底是不是真的有提升?就算有提升,是提升多少呢?實際上有感嗎?可能要實測才知道。
於是我這次就想要來親身體驗看看,實際測試看一下效能提升了多少。
本次會利用 Laravel 8.x 範例應用來做測試,測試的工具為 ApacheBench。
2021 年 11 月底, PHP 8.1 釋出了。每次釋出新版本時,官方總是不外乎地會宣稱新版本的執行速度提升了。可是到底是不是真的有提升?就算有提升,是提升多少呢?實際上有感嗎?可能要實測才知道。
於是我這次就想要來親身體驗看看,實際測試看一下效能提升了多少。
本次會利用 Laravel 8.x 範例應用來做測試,測試的工具為 ApacheBench。
在 PHP 8.0 發佈一年後,PHP 8.1 在今年 2021 年 11 月 25 日也發佈了。
去年我曾寫了一篇文章,介紹 PHP 8.0,而過去這一整年,我在開發上也實際使用了不少 PHP 8.0 的新功能,例如 Nullsafe operator
、match
及 Constructor property promotion
。
這些改進跟新功能,替開發帶來不少方便跟效率。我相信這次的 8.1 版本,PHP 團隊也會帶來不少令人驚豔的地方吧!
本篇一樣會介紹一些我感興趣的新功能,搭配一些簡單的試玩。大家可以參考看看。
大家一開始在學習使用 Docker 時,會學著撰寫 Dockerfile,也會從 DockerHub 上挑選適合的 Image。
但不知道大家有沒有發現,有時候明明都是同一個東西,卻有很多種不同的選擇?比如說,我自己最近常用 PostgreSQL postgres,一樣都是 14 版,卻有 postgres:14、postgres:14-bullseye、postgres:14-alpine 等,各種不一樣標籤的 Image 。
這些不一樣的 Image 對初學者來說蠻令人困惑的,會不曉得有什麼差別,也不知道該選哪一個。但理解後發現其實沒有那麼複雜,簡單來說,後面那些字,指的是背後的作業系統。
跳槽到新創團隊一陣子後,隨著一開始的新鮮感跟熱情逐漸散去,疲乏感就漸漸回來了。
相較於原公司的官僚,這次的疲乏感來源在於,團隊在乎的是開發時間要短、速度要快,而不看重細節與品質。
雖然可以理解新創團隊有其壓力,需要趕快滿足客戶的需求,需要趕快找到適合的商業模型,需要趕快建立起自己的品牌等。但作為一個工程師,心裡總是希望可以做出更好的成果的。
不過說起來,不管在什麼規模的公司,好像或多或少會遇到類似的問題,畢竟「時間」跟「品質」對專案管理來說,本來就是一件非常對立跟糾結的事情,很難做到大家都滿意。
本篇為 PHP 系列
__invoke()
是 PHP 眾多魔術方法中的一個,可以用來讓你將物件作為 function
使用,詳細說明可參考官方說明文件。
問題是,把物件當作 function
使用是什麼意思呢?其實就是在物件後面直接加()
,如果還是不清楚,我們接著看以下的範例就知道囉。
本篇為PHP系列。
在 JavaScript 中有個好用的箭頭函式,用起來很簡短,但對於不懂的人來說,會覺得有點魔幻,覺得很神奇卻又不是那麼好理解,因此常常被前端工程師拿來炫技,那什麼是箭頭函式呢?
我們來看下面的 JavaScript 範例,我們有一個 array,想要把其中的每個值都變成兩倍,那可以使用 map 搭配匿名函式來這樣做:
let numbers = [1, 2, 3, 4];
let doubleNumbers = numbers.map(function(number) {
return number * 2;
});
這樣我們的 doubleNumbers
就會是 [2, 4, 6, 8]
。
而上面這個範例,若改成使用箭頭函式的話,就會像這樣,變得比較簡潔:
let numbers = [1, 2, 3, 4];
let doubleNumbers = numbers.map((number) => number * 2);
這樣簡潔的特性,是箭頭函式深受喜好的原因之一,而這樣的箭頭函式在 PHP 也可以使用了。
本篇為PHP系列。
in_array
跟 array_key_exists
都是經常使用的 PHP 函式,被用來尋找 array 中是否存在某個東西。
但一樣都是尋找,兩者找東西的方法有什麼不一樣呢?
這邊就直接開門見山講答案,
in_array:檢查的是「值 value」是否存在;
array_key_exists:檢查的是「鍵 key」或「索引 index」是否存在。
如果不懂「值」跟「鍵」的差別可以繼續往下看哦。
在上一回《寫給 PHP 新手的物件導向教學(二):建構子、方法及屬性》中,
我們說明了類別的建構子、方法跟屬性,這一回我們會來聊聊物件的封裝、可見度,以及一點點的繼承。
hasOne
跟 belongsTo
都是 Laravel Eloquent 所提供的方法,負責處理一對一的關係。
那一樣都是一對一,這兩個用法的差別在哪裡呢?簡單來說是這樣:
hasOne
指的是「擁有一個東西」,我擁有一個東西,我在它的身上貼上了我的名字。belongsTo
指的是「屬於某個人」,我屬於別人,我被貼上了他的名字。
在上一回《寫給 PHP 新手的物件導向教學(一):建立類別與物件》中
我們講到了如何建立類別,
那這一回我們會接續著講解一個重要的概念:建構子,
不過在進入建構子之前,我想優先提一下「方法」及「屬性」。
PHP 過去在物件導向的實現上有許多的缺陷以及令人詬病的地方,
然而自從 2015 年推出了 PHP 7 、以及 2020 年推出 PHP 8 以後,
PHP 已經擺脫了過去的陰霾,不但效能提升許多,也成為了一個相當完整可靠的物件導向程式語言。
經過多年的發展,目前許多流行的 PHP 框架遵循著物件導向的概念,
這些框架充分地利用 PHP 在 OOP 上的特性,設計出許多優良的機制,
讓工程師們可以更快速地開發出符合市場需求的系統。
本系列希望能夠一步一步講解物件導向的概念,
希望讀者最後能夠理解複雜的物件導向程式碼,
並可以自行設計出良好的程式。
俗話說的好,面試的時候,不只是公司在挑選你,你也在挑選公司。
有些人比較沒自信,面試的時候會覺得有工作就好,而不敢對公司太挑剔,但其實一份工作短則半年,長則三至五年,甚至十年,而且每天都要在辦公室花上八個小時以上,對於一個要待這麼久的地方,挑錯了會相當痛苦,再說每次換工作的成本並不低,所以選工作的時候應該要挑剔一點才好。
只是說該怎麼挑比較好?又有哪些點應該要注意的呢?以下我想分享一些看法,讓大家在挑選工作的時候可以參考看看~
大家寫程式的時候,有沒有遇過這樣的情況呢?
有某一種資源,經常被使用,而且每次使用前都要做初始化,比如說資料庫,每次使用前都要設定連線;或是,有些資源如果被重複使用,會造成一些問題,例如同樣以資料庫為例,多次的連線,會影響效能。
如果大家也有這樣的困擾,那本篇將要介紹的單例模式 Singleton Pattern
就是被設計出來解決這個問題的,有興趣的讀者可以繼續往下閱讀哦。
好的變數命名可以提升程式碼的可讀性,也能減少錯誤的發生,
最主要的宗旨是,讓看的人可以更容易理解程式碼內容,
所以並沒有標準的做法,只要大家容易理解即可,最重要的是取得團隊共識。
以下歸納一些命名方式,第 6 點有一些命名靈感的來源,可以往下看。這些建議沒有對錯的問題,只是個人習慣,提供給大家參考一下。
本篇為PHP系列。
Copy-on-write
是一種用來的節省記憶體用量的機制,
在很多地方都有使用到,而 PHP 的 Array 也有用到這樣的機制,
不過在開始正式討論 Array Copy-on-write 之前,我們先來稍微看一下 PHP Array 的複製機制。
本篇是《程式開發之路》系列文
每個人開始寫程式的理由不太一樣,有些人是因為科系,有些人是因為工作,而有些人則是因為個人興趣。
當我們認真學習程式一段時間後,大概就可以知道自己適不適合寫程式了。也許會發現,自己其實對寫程式沒有擁有自己想像中的熱誠,或者是發現,自己其實並不擅長寫程式。
而這樣的認知,並不是一件壞事。人們如果可以更早的了解自己的能力跟興趣,對未來長期的發展是有很大助益的。
相反地,那些可以撐過程式開發入門階段的人,願意花很多時間跟程式相處,不排斥學習相關知識的人,或多或少代表未來這些人會想要朝著這個方向前進,更明確的說,作為一份職業。
本篇是《程式開發之路》系列文
學習電腦程式語言的第一步是:挑一個常見的程式語言。
可以參考TIOBE的熱門程式語言指數
在學校,因為目標比較不明確,教授也不希望這麼快讓學生定型,所以通常會使用比較通用的語言來做教學,例如C、C++或Java。
但在職場中,不同的領域會有不同的慣用語言。例如網頁開發,前端就是JavaScript、後端會是PHP、Java、Go等等;資料分析相關,會選擇用R、Python等;APP是Java、Swift等;韌體硬體相關多半會是C、C++等。
學習一個程式語言,其實是學習跟電腦的「溝通方式」,我們利用程式語言來指揮、操作電腦,來完成我們的需求。現在的電腦架構大致上已經固定了,如果用學習的角度來看,學習哪一個語言並不是那麼重要,重要的是學習觀念。用比較漂亮的話來說,只要有任何一個語言的扎實基礎,跳到另一個語言都是相對容易的。
需求方常常一句:「我想要做一個簡單購物車功能。」就把事情丟過來了。
開發者團隊只能默默地深呼吸,在心裡翻個小白眼,接著親切的詢問對方:「請問你他媽,呃,抱歉,請問你想像中的購物車是什麼樣子呢?」
本篇為PHP系列。
先貼個官方說明壓壓驚,The ArrayAccess interface
Interface to provide accessing objects as arrays.
簡單來說,這個介面讓你可以用讀取陣列Array
的方式,去讀取物件Object
。
我的工作地點在台北市區,租房子的時候一直在想,到底要離公司近、還是遠比較好?
後來想了一下,既然都要租房子了,那當然就是離公司越近越好。有多近?最好是走路五至十分鐘就可以到公司的距離。
會這樣決定,其實最主要是因為我很在意時間。
工程師:「我剛剛測試明明可以啊!」
用戶:「可是網頁打不開啊???」
⋯⋯
工程師:「我昨天測了一整天,還是找不到問題耶,不然你電腦借我看一下。」
工程師:「欸,你是不是開飛航模式= =」
用戶:「真的耶!」
最近經常跟一些在做數位轉型的傳統產業合作,
他們都想借助線上工具,來嘗試新的商業模式。
聽起來很棒對吧,但做起來實在是痛苦啊。
像是有一家,工程師好不容易把所有資訊都放到網頁上,
上面的老闆卻問說:「可不可以把網頁上的東西都印出來呀?我不習慣用網頁」,其他人還附和著:「沒錯!印出來弄成冊,可以拿去賣」。
聽了真是差點沒昏倒,工程師這麼辛苦把資料整理到資料庫上,到底為了什麼?
所以說,如果只是嘴巴喊著數位轉型,但思維卻還是舊時代,根本轉型轉不過來呀~
做為一個管理技術團隊的基層主管,到底要不要寫程式呢?
我們先假設,這篇文章提到的技術主管是:5-7 人 web 開發團隊的負責人,也就是初階、基層的技術主管。
大家是否會好奇後端工程師的職涯發展?我自己在剛開始工作的時候,就常常在想做這一行,下一步要往裡走比較好?很當時希望有人可以討論跟指引方向。
不知不覺中,我自己在業界也待了一個說長不長,說短不短的日子了,就想說也許也可以依照自身經驗,還有自己所看到的,來寫一篇文章分享。
我自己曾經待過千人、甚至萬人的跨國企業,也待過只有十幾人的新創小公司,每間公司都有不同的特性。
而我今天主要想分享的是,我過去在一家中型的公司的經驗,一來是我認為這應該比較適用於大多數人、二來是因為這間是我目前為止待得最久的公司,可以敘述的比較詳細。
我大概簡單介紹一下背景,這間公司的工程團隊大概100人左右,是台灣本土的網路產業公司,有將近二十年的歷史,因此公司已經有一定的制度了。
我會從工程師一路介紹到技術副理的角色,再往上走的話,一來是差異性會比較大,二來是自身的經驗還沒有那麼多,所以我只會講到技術副理為止。
沒有完美的工作,只有最適合自己的工作。
為了生活,工作通常是一種不得不的選擇。
但工作畢竟還是佔掉人生一半的時間,即便不得已,也是要想辦法讓自己過的下去,可以維持工作的動力、維持健康的心情跟狀態。
而我相信,人生是一場馬拉松,比的是氣長,即便不求突出亮眼,也要避免自己在中途就被消耗殆盡。
因此如果目前的工作,不斷的消磨自己的能量,如果有點積蓄,生活還算過得去,那可能就要考慮離職了。
根據我自身的經驗,以及和朋友、同事討論的結果,比較常見的離職原因有這九個:
扎實的基本功是一切的基礎,
在這個資訊發達的時代,網路上到處都可以獲得學習資源,
如果想要系統化地學習一套完整的知識,閱讀仍舊是最好的選擇之一。
Introduce to php magic method: __get & __set
本篇為PHP 系列
接續PHP魔術方法系列,
此次要講的是,可以讓操作資料更彈性的 __get
及 __set
,
Code Review 的重點是改善及控制 code quality,確保不會有糞 code 進到 master branch。
因為專案時程有時候非常緊急,review 的時候並沒辦法盡善盡美,因此需要將各個項目,依據重要程度還有急迫性來分級,藉此來達到有效的 code review。
以下是我自己在使用的優先順序分級: