19. PHPer x New Features

...为什麽 PHP 的变数宣告要使用 $ 符号?...PHP 在变数前使用 $ 的用意是提醒开发者,宣告变数是需要花费记忆体空间成本的。也因此,PHP 开发者比其他语言的开发者更重视记忆体配置。--节录自民明书坊刊,你所不知道的 PHP 真相

安安,今天想跟大家介绍几个不错的 New Features。
顺便当个公道伯(但我也才写一年多)出来帮 Modern PHP 平反一下。

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 怎麽还没死?

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
{
}

待补 >"<

ref


<<:  [Day 20] - 『转职工作的Lessons learned』 - GraphQL (Hasura) - 身份级别权限设定

>>:  Day19 Gin with Swagger

Day4:进入新手村前先让我复习一下QQ-CSS3-Flexbox-基本用途

Flexbox是CSS3的盒模型,这个属性是用来做排版使用,也因为它可以灵活弹性排版的特性,也很常使...

第 28 集:Bootstrap 客制化 component 元件样式

此篇会介绍如何修改 Bootstrap 元件样式。 事前准备 须先了解变数设置、通用类别设置,再继...

焦虑与压力

前言 昨天分享了关於拒绝的两三事,是因为它容易出现在日常生活与团体协作当中,後续带来的影响也不容小觑...

[Day28] Esp32 + IFTTT + Google Sheet - (程序码讲解)

1.前言 OK,今天要来说说Code的部分,上一篇我们把资料储存在Google Sheet中,那今天...

React Hooks - useContext

当我们要将父元素的资料传递到子元件的时候会使用 props,但假设有很多个 component,曾曾...