首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >处理因引入类型提示而导致的PHP致命类型错误

处理因引入类型提示而导致的PHP致命类型错误
EN

Stack Overflow用户
提问于 2018-08-16 20:36:02
回答 2查看 100关注 0票数 2

TL;DR

  • 我们是否可以对PHP进行配置,使其在类型提示导致参数类型错误时不会导致致命错误,而不会导致警告?
  • 是否有PhpStorm / GIT的插件/扩展可防止保存或推送包含未解决问题的代码(最好只筛选类型提示问题)。

对于我正在做的一个有点时髦的代码库的项目,我们正试图在我们能做到的地方加入类型提示。我们决定这样做是为了让代码库更容易阅读和维护。

我有C#背景,所以很明显编译器让我变懒了,因为当我试图传递一个错误类型的值时,它基本上会告诉我。在PHP中,我们必须依靠IDE告诉我们,但由于没有编译,这并不能阻止我们实现在运行时会导致致命错误的代码路径。

由于我们都希望继续使用这些类型提示,并且不想让它在运行时导致致命错误,我们想知道是否可以将PHP配置为在类型提示失败时抛出警告而不是致命错误。这将允许代码保持运行,并仍然通知我们需要解决此问题的事实。

我知道类型提示在设计上应该会导致死亡,但是我们正在尝试暂时解决这个问题。

对我们也有效的(可能是理想的)是某种插件,它以某种方式阻止我们保存/推送有类似这样未解决问题的代码。我们使用PhpStorm和GIT进行版本控制。

EN

回答 2

Stack Overflow用户

发布于 2018-08-16 20:47:52

我的建议是开始对添加的任何新代码或更改的旧代码执行自动化测试。因此,您将立即看到您是否破坏了任何东西,或者是否存在触发类型错误的执行路径。

Here is an article on how to implement test automation in legacy systems

票数 1
EN

Stack Overflow用户

发布于 2018-08-19 05:02:30

不确定这是否可能,我怀疑它是可能的。

但是:请不要这样做。

相反,您可以:

  • 编写单元测试,例如using PhpUnit
  • Allow "null“响应和参数,同时需要一个类型如果值被传递
  • 要求代码使用代码质量检查器通过某些条件,比如Codacy (还有很多其他的!)

对于null响应或null参数,请考虑以下内容:

代码语言:javascript
复制
/**
 * @var User
 * @ORM\ManyToOne(targetEntity="User\Entity\User", fetch="EAGER")
 * @ORM\JoinColumn(name="bcc_user_id", referencedColumnName="id", nullable=false)
 */
protected $bcc;

这是我的一个项目中一个类的属性的示例。在本例中为Mail实体。它应该有一个实例User的类对象。一个正常的(生成的) getter/setter最终会是:

代码语言:javascript
复制
/**
 * @return User
 */
public function getBcc() : User
{
    return $this->bcc;
}

/**
 * @param User $bcc
 *
 * @return Mail
 */
public function setBcc(User $bcc) : Mail
{
    $this->bcc = $bcc;

    return $this;
}

然而,它是电子邮件的“密件抄送”。所以,它可以是空的。或者可以删除一个值,使其为null。因此,我们必须允许在setter中使用null作为参数。getter必须能够返回null

代码语言:javascript
复制
/**
 * @return null|User
 */
public function getBcc() : ? User
{
    return $this->bcc;
}

/**
 * @param null|User $bcc
 *
 * @return Mail
 */
public function setBcc( ? User $to) : Mail
{
    $this->bcc = $bcc;

    return $this;
}

好了。2个问号就够了。

另外,还可以查看this question & answersPHP 7.2 "new features"发行说明。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51877261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档