我们如何在PHP中强制执行参数类型?

我们如何在PHP中强制执行参数类型?,php,parameters,interface,parameter-passing,Php,Parameters,Interface,Parameter Passing,Java编译器确保每个方法调用都包含与参数类型兼容的参数。在下面的示例中,传递不实现LogService接口的内容甚至不会编译 public logMessage(LogService logService, String message) { logService.logMessage(message); } 有没有办法用PHP实现同样的效果?如果我传递了一个与LogService接口不兼容的对象,我希望在IDE中立即知道,而不是在测试中发现。我目前正在使用PHP5.4,但我有更高的

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

public logMessage(LogService logService, String message) {
    logService.logMessage(message);
}
有没有办法用PHP实现同样的效果?如果我传递了一个与LogService接口不兼容的对象,我希望在IDE中立即知道,而不是在测试中发现。我目前正在使用PHP5.4,但我有更高的选择

public function logMessage($logService, $message) {
    $logService->logMessage($message);
}
这允许您执行Java示例中显示的操作。如果使用
declare(strict\u types=1)PHP将抛出致命错误。如果省略该选项,它将尝试将值类型转换为该类型(与使用
=
比较运算符与严格的
==
比较运算符时非常相似)


我建议使用最新版本的PHP,这样不仅可以确保您拥有最新的安全补丁,还可以获得最新的功能。例如,不支持空参数类型,并且。

升级到支持参数类型声明的PHP版本(PHP7)。事实上,请转到7.3或更高版本,因为这是当前支持的。你也会得到很好的性能提升。PHP5.4在5年前就已经停止使用和支持了。是的,我意识到我应该看看5.4了。我已经开始在PHP中编码一些东西了多年不使用这项技术,我只是想记住如何做事情之前,我真的考虑任何实现。但基本上你是在告诉我,我在浪费时间学习5.4……约翰,在我自己的搜索中,我甚至没有遇到“暗示”这个词。我发现它基本上回答了我的问题。请写一篇回帖。谢谢约翰。我在cPanel有一个dev帐户。已根据反馈升级到7.3。
public function logMessage(LogService $logService, string $message) {
    $logService->logMessage($message);
}