【问题标题】:Symfony getUser type hintingSymfony getUser 类型提示
【发布时间】:2016-06-10 08:50:35
【问题描述】:

我发现必须在 getUser 上不断使用 @var 有点烦人。看起来很草率。

所以我正在考虑开始使用它来代替

<?php

// in the controller
$user = Customer::isCustomer($this->getUser());

// in the entity
/**
 * @param Customer $user
 *
 * @return Customer
 */
public static function isCustomer(Customer $user)
{
    return $user;
}

这是个好主意吗?馊主意?可怕的想法?

【问题讨论】:

  • 顺便说一下,isCustomer 表示返回类型是布尔型,即如果$user 是客户,则返回true...所以要注意函数命名。

标签: symfony type-hinting


【解决方案1】:

在这种情况下,类型提示是更好的选择。

为什么要通过手动添加检查而不是向参数添加简单的类型提示来编写更多代码。

代表两个条件的四行代码给出的结果完全相同:

/**
 * @param Customer|null  $user
 *
 * @return Customer|null
 */
public static function isCustomer(Customer $user = null)
{
    // If $user is null, it works
    // If $user is a Customer instance, it works
    // If it's other, an exception is thrown

    return $user;
}

类型提示优化并提高代码的可读性。 这是 symfony2、php 等中的约定。

它通常用作您和您的方法的约束(或合同)。

另外,接口或抽象类对参数添加要求是唯一的选择,因为它们没有主体,因此无法编写条件。

更新

在 SensioLabs Insight 中,对象类型提示使用以下消息表示警告:

参数user,它是一个对象,应该是类型提示的。

由于使用了动词should,我认为这不是强制性要求,只是一个很好的做法,以防它不会造成任何问题。

此外,您可以使用您给出的示例,而不会使您的代码变得糟糕。

【讨论】:

  • 虽然这没有回答我,但这是一个坚实的改进。谢谢!
  • 我不确定你的问题的重点。你能帮我更好地理解吗? @var 是什么意思?
  • 基本上我的控制器受到/* @var Customer $user */ 的困扰,我正试图摆脱它,因为我告诉 IDE 一些事情(在某些时候)可能不是真的。
  • 是的。关键是如果我不使用它们,IDE 中就没有类型意识,我正在努力寻找更好的方式(tm)
  • 使用Type|null可以提供帮助,并尽可能多地使用Interface的和父类,以使您的类型提示匹配多个类。
猜你喜欢
  • 2021-05-11
  • 2018-08-23
  • 2018-07-27
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-06
  • 2013-12-26
相关资源
最近更新 更多