【问题标题】:Strongly typed vs Weakly typed强类型与弱类型
【发布时间】:2020-02-19 11:35:44
【问题描述】:

我最近被任命为一个使用 PHP 后端的项目的开发人员。凭借以前在 C# 等强类型语言方面的经验,这对我来说很难。在 C# 中,更容易:-

  • 查找所有参考文献
  • 更好的调试体验
  • 了解预期的对象类型

还有更多...

我知道像 JavaScript 这样的弱类型语言的好处,它开启了你可以用它做很多事情的可能性。但是当你有业务对象的业务逻辑时,我更喜欢强类型语言。

我真正的问题是你是否有这样的事情:-

public function saveEntity($externalId, $layer, $sign = null, $user= null, $pass = null) {

我应该如何知道 $layer 包含什么而不必在调用此函数之前阅读所有代码行?在这些识别对象类型很重要的地方是否存在技巧/陷阱?

【问题讨论】:

  • 我希望他们添加了 cmets。
  • 使用phpdocs帮助了解每个参数的类型和内容
  • 您也可以使用像 phpstorm 这样的好 ide 来跟踪引用和函数用法(我认为是 ctrl+click 或 ctrl+b)

标签: php strong-typing weakly-typed


【解决方案1】:

两种方法。

您可以使用phpdoc 来注释您的方法和变量:

/**
 * @param int $externalID
 * @param Layer $layer
 * ...
 * @return boolean
 */
public function saveEntity($externalId, $layer, $sign = null, 
                           $user= null, $pass = null) { ... }

或者只是在方法声明中写类型(需要 PHP >= 7):

public function saveEntity(int $externalId, Layer $layer, $sign = null, 
                           $user= null, $pass = null): boolean { ... }

或者,最好同时使用。

在您的代码中始终如一地执行此操作可为您提供所需的一切,同时仍能从动态语言中获益。然后,您的 IDE 可以进行重构、查找用法并发出警告等。

【讨论】:

  • 两者都使用是我的偏好,并且与队友一起工作也很好。像 PHPStorm 这样的 IDE 让这变得非常方便。
  • 两者都用,但要确保它们不相互矛盾。
  • 当对象由于 API 调用而被序列化时怎么办。这个 JSON 可以改变,对吧?另外,如果您在序列化后开始修改对象,那么除非您查看对该对象所做的一切,否则很难预测其状态。在强类型世界中,JSON 中的更改将迫使您相应地更改对象类型。
  • 不太明白你在这里问什么,但是有一个JsonSerializable 接口可以做你想做的事。
  • 我唯一的论点是,如何在设计时预测对象包含的内容?
猜你喜欢
  • 1970-01-01
  • 2011-06-22
  • 2010-10-05
  • 2012-08-07
  • 2011-08-02
  • 2011-10-20
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多