# PHP 速查

## 数组函数

数组兼作列表与字典，映射、过滤、归约配合箭头函数最顺手，注意回调参数顺序是值在前。过滤函数会保留原键名，想重新从零索引得再套一层数组值函数，否则前端拿到的下标不连续。

```php
$a = [1, 2, 3];
```

## 类型声明

参数、返回值和属性都能标注类型，文件首行开启严格模式后不再隐式转换。构造器属性提升能把声明和赋值合成一行，联合类型用竖线连接，可空类型加问号，别混用两种写法。

```php
declare(strict_types=1);
```

## 命名空间与自动加载

命名空间对应目录结构，用 use 引入其它命名空间，自动加载映射交给 Composer 处理，别再手写一长串 require。同一文件建议只放一个类，全局函数和常量要显式加反斜杠限定。

```php
namespace App\Service;
```

## PDO 预处理

用预处理语句绑定参数，绝不拼接外部输入；开启异常模式后出错会抛异常，默认取关联数组能省掉额外设置。执行时传数组绑定最省事，参数标记不要自己加引号，转义交给驱动处理。

```php
$s = $pdo->prepare("SELECT 1");
```

## Composer

composer.json 声明依赖与自动加载映射，安装命令按锁文件复现环境，生产环境加跳过开发依赖的参数。改完自动加载规则要重新生成映射，报类不存在时先查这里。

```json
{ "require": { "monolog/monolog": "^3.0" } }
```

## PHP 8 特性

命名参数可跳过中间默认值，match 是严格比较的表达式，nullsafe 运算符在对象为 null 时直接返回空，不再层层判空。match 没有匹配项会抛异常，记得写 default 分支兜底。

```php
$m = match (404) { default => 0 };
```
