首页 > 解决方案 > 我们如何在 PHP 中强制执行参数类型?

问题描述

Java 编译器确保每个方法调用都包含与参数类型兼容的参数。在下面的示例中,传递不实现 LogService 接口的东西甚至不会编译。

public logMessage(LogService logService, String message) {
    logService.logMessage(message);
}

有没有办法用 PHP 实现相同的目标?如果我传递了一个与 LogService 接口不兼容的对象,我想在 IDE 中立即知道,而不是在测试中发现。我目前正在使用 PHP 5.4,但我可以选择更高。

public function logMessage($logService, $message) {
    $logService->logMessage($message);
}

标签: phpparametersinterfaceparameter-passing

解决方案


PHP 7 引入了类型声明,允许您执行您在 Java 示例中显示的操作。如果你使用declare(strict_types=1);PHP 如果参数类型与函数签名不匹配会抛出一个致命错误。如果省略它,它将尝试将值类型转换为该类型(很像使用==比较运算符与严格===比较运算符时)。

public function logMessage(LogService $logService, string $message) {
    $logService->logMessage($message);
}

我建议使用最新版本的 PHP,不仅可以确保您拥有最新的安全补丁,还可以获得最新的功能。例如,直到 PHP 7.1 才引入可空参数类型、object7.2中的类型和8.0 中的联合类型


推荐阅读