gpt4 book ai didi

php - 在 PHP 中使用接口(interface)

转载 作者:可可西里 更新时间:2023-10-31 22:14:52 25 4
gpt4 key购买 nike

我来自 C#,我正在努力寻找使我的代码可扩展的 PHP 方式。

例如,我有一个函数可以计算我建议的每 eclipse 物摄入量。它着眼于维生素、卡路里、矿物质等......

我想在我的应用程序中使用许多不同的食物对象和不同的函数来查看食物的不同方面,所以我实现了一个 IFoodNutrition 接口(interface)并创建了我想要的食物类与我的功能兼容实现它。然后我声明我的函数将它作为参数

function GetRda(IFoodNutrition $food){}

在 C# 中,我会指定我需要在接口(interface)中使用的所有属性,因此我知道实现此功能的任何类都将与此功能兼容。

让我头疼的是 PHP 只允许接口(interface)中的方法签名。

我的问题显然是范式转变。我不确定 PHP 中的等效模式是什么。我已经阅读了文档,但除非您从抽象类继承,否则我看不到类似的替代方案,但是您只能从一个类继承,因此工作方式不同。

由于 PHP 不是类型安全的,因此我不必创建接口(interface)。有人可以将任何对象发送到该方法,如果它具有正确格式所需的属性,它就可以工作。这对我来说似乎不对,因为我已经习惯于在界面中布置事物应该如何交互。

我觉得至少应该在验证对象的中间有一些额外的步骤,并且开发人员可以查看一些明显的结构,然后直观地实现他们自己的类并在运行时之前查看错误。

PHP 中有这样的特定模式吗?

最佳答案

PHP only allows method signatures in interfaces.

这是真的。但是,没有什么可以阻止您为属性 创建传统的getter 和setter 作为界面的一部分。这样做可以抽象出底层的实现细节。

Someone can just send any object to the method and if it has the properties needed in the right format it will work.

这不是真的。你有type-hinted IFoodNutrition $food 的参数。如果此函数接收到未实现 IFoodNutrition 接口(interface)的对象,PHP 将抛出 fatal error 。

关于php - 在 PHP 中使用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29684889/

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