绝不 写含糊不清的方法, 方法返回值类型 必须 只有一个.
你 应该 使用强类型来签名和约束你的方法.
你 应该 灵活使用异常, 通过异常来提前中断方法的执行绝对会比 return null
有更好的分支控制效果.
必须 捕获你能预知(需要捕获)的异常, 并做好相应处理.
$$
<?php
//错误的用法
public function jsonDecode($json)
{
return json_decode($json); //这里可能返回一个数组, 对象, null
}
//正确的用法
public function jsonDecode(string $json): array
{
$result = json_decode($json, true);
if (is_null($result)) {
throw new \JsonTransformException(‘json转换失败’);
}
return $result
}
$$
我们为什么约束参数类型与返回值类型?
一个好的方法签名可以让使用者最快的了解你的意图, 如果你含糊不清,那么使用者就要花费更多的时间去了解你的意图.
强类型能让PHP在运行时减少一些类型转换的开销
强类型能让低级错误在编码阶段尽可能的暴露出来 (IDE的功劳)
Ps: 请不要以兼容性来质疑强类型带来的优势, 你可以试想一下, 这个jsonDecode方法如果不约束类型, 会发生哪些问题. 如果你本来要的是一个integer,但是开发者给了一个string进来, 即使你不会因为强类型约束报错, 难道你的业务就能跑得通吗?
大家不要惧怕异常, 异常系统在任何一门面向对象语言中都是很重要的一环, 除了暴露错误以外,还能起到很好的分支控制效果.
设计得好的异常体系能让代码排错变得轻松