首先考虑 API 的一致性。
不好的:
function travelToTexas($vehicle): void { if ($vehicle instanceof Bicycle) { $vehicle->pedalTo(new Location('texas')); } elseif ($vehicle instanceof Car) { $vehicle->driveTo(new Location('texas')); } }
好的:
function travelToTexas(Traveler $vehicle): void { $vehicle->travelTo(new Location('texas')); }
避免类型检查(第 2 部分)
如果你正在使用像 字符串、数值、或数组这样的基础类型,你使用的是 PHP 版本是 PHP 7+,并且你不能使用多态,但仍然觉得需要使用类型检测,这时,你应该考虑 类型定义 或 严格模式。它为您提供了标准 PHP 语法之上的静态类型。
手动进行类型检查的问题是做这件事需要这么多的额外言辞,你所得到的虚假的『类型安全』并不能弥补丢失的可读性。保持你的代码简洁,编写良好的测试,并且拥有好的代码审查。
否则,使用 PHP 严格的类型声明或严格模式完成所有这些工作。
不好的:
function combine($val1, $val2): int { if (!is_numeric($val1) || !is_numeric($val2)) { throw new \Exception('Must be of type Number'); } return $val1 + $val2; }
好的:
function combine(int $val1, int $val2): int { return $val1 + $val2; }
移除无用代码
无用代码和重复代码一样糟糕。 如果没有被调用,就应该把它删除掉,没必要将它保留在你的代码库中!当你需要它的时候,可以在你的历史版本中找到它。
Bad:
function oldRequestModule(string $url): void { // ... } function newRequestModule(string $url): void { // ... } $request = newRequestModule($requestUrl); inventoryTracker('apples', $request, 'www.inventory-awesome.io');
Good:
function requestModule(string $url): void { // ... } $request = requestModule($requestUrl); inventoryTracker('apples', $request, 'www.inventory-awesome.io');
对象和数据结构
使用对象封装
在 PHP 中,你可以在方法中使用关键字,如 public, protected and private。
使用它们,你可以任意的控制、修改对象的属性。
当你除获取对象属性外还想做更多的操作时,你不需要修改你的代码
当 set 属性时,易于增加参数验证。
封装的内部表示。
容易在获取和设置属性时添加日志和错误处理。