php - 我们如何在 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);
}
解决方案
PHP 7 引入了类型声明,允许您执行您在 Java 示例中显示的操作。如果你使用declare(strict_types=1);
PHP 如果参数类型与函数签名不匹配会抛出一个致命错误。如果省略它,它将尝试将值类型转换为该类型(很像使用==
比较运算符与严格===
比较运算符时)。
public function logMessage(LogService $logService, string $message) {
$logService->logMessage($message);
}
我建议使用最新版本的 PHP,不仅可以确保您拥有最新的安全补丁,还可以获得最新的功能。例如,直到 PHP 7.1 才引入可空参数类型、object
7.2中的类型和8.0 中的联合类型。
推荐阅读
- webhooks - 如何将包含以下数据的字符串发送到下一个 Slack Incoming Webhook
- javascript - 使用 Pentaho 比较不同 csv 中的一个文件
- for-loop - Foreach 仅包装最后一个元素
- zeromq - 使用 zmsg_send 发送消息 3 次后未到达
- r - 为什么可以运行块但在 r-markdown 中编织时出现错误?
- ruby-on-rails - Rails:“调用私有方法‘require’#
我有一个包含需要存储在数据库中的数据的文本文件。
在 Rails 控制器动作中,我有这样的事情:
class ImportDataController < Applicati
- python - 将文本文件中的数据读入字典
- ios - 带有“禁用 PIE”/i386 拱门的 Gomobile 绑定生成库
- vb.net - 当用户打算更改选项卡时的 TabCard 事件
- r - R Plotly Map,从 2 个数据帧中读取的悬停文本