PhpStorm自动完成STD对象不起作用

时间:2018-11-13 14:32:08

标签: php json phpstorm

我正在使用PhpStorm构建下一个项目。自动取款机我正在寻找一种保存所有我的发帖请求的干净方法,而不是使用<fieldset id="Disable_Passport"> <form id="passport_upload_form" enctype="multipart/form-data"> <input type="hidden" name="user_email" value="<?php echo $this->session->user_email; ?>"/> <p id="passport_msg" style="color:green; text-align:center;"></p> <label style="font-size:16px;">Passport</label><span style="color:red; font-size:20px;">*</span> <input class="form-control" id="passport" type="file" name="passport" onchange="validatePDF(this)" accept="application/pdf"/> <input type="button" class="home_update_button" id="passport_update_button" name="passport_upload" value="Upload"> </form> </fieldset>等一个接一个地检查它们。因此,我可以循环isset

我正在尝试制作一个STD对象,但是PHP不会自动完成它。我认为我应该使用PHPDoc,但无法正常工作。

那我如何获得PhpStorm自动完成STD对象

我希望有人知道!

PS:如果您想出一种保存stdObject值的更好方法,请告诉我!

代码:

$_POST

Phpstorm Screenshot

3 个答案:

答案 0 :(得分:2)

stdClass类型的对象没有标准属性,只有自定义属性。因此,PhpStorm没有任何明显的方法可以找出建议。甚至人类也将遇到麻烦,因为您的代码来自外部输入,因此可以包含任何内容。

使用存根进行破解是一种方法,但它会影响整个代码库。

一种可能的解决方案是在项目的任何地方声明一个自定义对象(该代码将由PhpStorm解析,甚至根本不需要执行):

class MandatoryPost extends stdClass
{
    /**
     * @var string
     */
    public $first_name;

    /**
     * @var string
     */
    public $last_name;
}

...并在此处和此处提供一些提示:

/** @var MandatoryPost $mandatory */
$mandatory->

但是,感觉就像是彻底的过度杀伤。首先使用stdClass的唯一原因是因为您对本来相当程序化的代码执行了可疑的JSON序列化。如果要验证使用对象,则创建一个适当的类来处理整个事情:

$user = User::createFromPost($_POST);
if ($user->isComplete()) {
}

...或一直使用纯数组。

答案 1 :(得分:1)

  

我正在寻找一种干净的方式

     

我正在尝试制作一个STD对象

这些句子是互斥的。如果您想使其简洁,请为该数据创建自己的类,然后将其填充。使用水化器。

我不知道确切的位置,但是您有很多选择。例如,您可以序列化一个对象。

如果要使用“数组方式”,则可以使用此简单功能

function checkMandatory(array $mandatoryFields, array $array) {
     return !array_diff_key(array_flip(mandatoryFields), $array);
}

用法

var_dump(checkMandatory(['first_name', 'last_name'], $_POST));

答案 2 :(得分:0)

您可以创建一个课程

<?php

class formFields
{
  private $first_name;
  private $last_name;

  public function __construct($first_name, $last_name)
  {
    $this->first_name = $first_name;
    $this->last_name = $last_name;
  }

  /**
   * @return mixed
   */
  public function getFirstName()
  {
    return $this->first_name;
  }

  /**
   * @return mixed
   */
  public function getLastName()
  {
    return $this->last_name;
  }

  /**
   * @param mixed $first_name
   */
  public function setFirstName($first_name)
  {
    $this->first_name = $first_name;
  }

  /**
   * @param mixed $last_name
   */
  public function setLastName($last_name)
  {
    $this->last_name = $last_name;
  }
}