...為什麼 PHP 的變數宣告要使用 $ 符號?...PHP 在變數前使用 $ 的用意是提醒開發者,宣告變數是需要花費記憶體空間成本的。也因此,PHP 開發者比其他語言的開發者更重視記憶體配置。--節錄自民明書坊刊,你所不知道的 PHP 真相
安安,今天想跟大家介紹幾個不錯的 New Features。
順便當個公道伯(但我也才寫一年多)出來幫 Modern PHP 平反一下。
因為身邊不少人沒用過 PHP,看看老舊的網路文章就覺得 PHP 很難用,真ㄉ是醬咪?
或是某些原因下被迫使用 PHP 留下不好回憶(?)的閱讀者,希望你看完覺得,「哎呀,是我誤會了呢 >"<」。
PHP 是弱型別,沒辦法做靜態語法檢查,超難用的啦!
甘阿捏?
其實 PHP 7 就提供了引數型別宣告與函式回傳宣告唷。
<?php
function arraysSum(array ...$arrays): array
{
return array_map(function(array $array): int {
return array_sum($array);
}, $arrays);
}
聽說 PHP 很不安全ㄟ。我聽說我老師說的。
甘阿捏?
我看不安全的是寫的人吧。
[討論] PHP是個漏洞多且不安全的後端語言? | alpe
[討論] PHP是個漏洞多且不安全的後端語言? | MoMoShota
[討論] PHP是個漏洞多且不安全的後端語言? | GALINE
PHP 命名很混亂,檔案結構也混亂。
甘阿捏?
你都不用 PSR、MVC 框架?
PHP 還沒死,而且還有在更新。
很多你想問怎麼還沒死的東西,其實都有在更新。
除了前面介紹的強型別模式,以下是我目前有用到的 featuers(和寫這篇文查到覺得好像滿方便的 features)。
原本只想介紹新 featuers,後來發現要確認是哪一版出的有點麻煩,就決定不分版本,請直接升到最新版 ><
Null coalescing operator
Null 檢查的語法糖。
<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>
物件::class
物件可以返回整個 class。
$foo = new Foo();
var_dump($foo::class);
如果是 ClassName::class 返回的是 ClassName
箭頭函示
fn() => file_get_contents($path);
array merge
原本
array_merge( $arrA, $arrB)
8.1 New Feature
[…$arrA, …$arrB]
function no return
function () : never
{
}
If return will throw fatal error
property assignment
過去不想被變可能要用 protected + getter,8.1 後可以宣告 public readonly
function (public readonly) : never
{
}
待補 >"<