gpt4 book ai didi

PHP强制接口(interface)实现

转载 作者:行者123 更新时间:2023-12-04 05:08:23 25 4
gpt4 key购买 nike

我的应用程序中有一个 SystemInfoFactory 类,它有一个 getSystemInfo()方法:

/**
* Returns SystemInfo object based on which OS
* server uses
*
* @return SystemInfoInterface SystemInfo object
*/
public function getSystemInfo()
{
$os = $this->getOS();

$systemInfo = null;

switch ($os) {
case "Linux":
$systemInfo = new LinuxInfo();
break;
case "Darwin":
$systemInfo = new OSXInfo();
break;
case "Windows":
$systemInfo = new WindowsInfo();
break;
}
return $systemInfo;
}

因此它根据主机系统选择合适的对象。现在,每个“信息类”都实现了 SystemInfo接口(interface)(getArchitecture、getCPU 等方法),但如您所见,我的代码中没有任何地方检查返回的对象是否真的实现了接口(interface)。检查是否选择 $systemInfo 是否被视为“良好做法”?对象在返回之前实现它?这显然不是必需的,但是如果有人扩展了这个应用程序(例如添加了 BSD 支持)并且忘记实现所有方法,他可能更难以调试。

最佳答案

这绝对是个好习惯。您在文档 block 中定义您的方法返回 SystemInfo 的实例.您的来电者应该能够依赖它。这在您的代码中很简单:

/**
* Returns SystemInfo object based on which OS
* server uses
*
* @return SystemInfoInterface SystemInfo object
*/
public function getSystemInfo()
{
$os = $this->getOS();

$systemInfo = null;

switch ($os) {
case "Linux":
$systemInfo = new LinuxInfo();
break;
case "Darwin":
$systemInfo = new OSXInfo();
break;
case "Windows":
$systemInfo = new WindowsInfo();
break;
default:
throw new \RuntimeException('System not supported');
break;
}

if (!$systeminfo instanceof SystemInfo) {
throw new \RuntimeException('Invalid SystemInfo object returned');
}

return $systemInfo;
}

确保您声明您将从该方法调用中抛出异常。这里的异常清楚地说明了发生了什么,而不必稍后在代码中追逐“未定义的方法”错误。

关于PHP强制接口(interface)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15225938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com