PhpStorm自动完成STD对象不工作

PhpStorm自动完成STD对象不工作,php,json,phpstorm,Php,Json,Phpstorm,我正在使用PhpStorm构建我的下一个项目。ATM我正在寻找一种干净的方法来保存我所有的post请求,而不是使用isset等逐个检查它们。。这样我就可以循环我的stdObject 我试图创建一个STD对象,但PHP并没有自动完成它。我想我应该使用PHPDoc,但不能让任何一个正常工作 那么如何让phpsform自动完成STD对象呢 我希望有人知道怎么做 PS:如果您想用更好的方法保存$\u POST值,请告诉我 代码: 我在寻找一条干净的路 我想做一个STD对象 这些句子是相互排斥的。若你们

我正在使用PhpStorm构建我的下一个项目。ATM我正在寻找一种干净的方法来保存我所有的post请求,而不是使用
isset
等逐个检查它们。。这样我就可以循环我的
stdObject

我试图创建一个STD对象,但PHP并没有自动完成它。我想我应该使用PHPDoc,但不能让任何一个正常工作

那么如何让phpsform自动完成STD对象呢

我希望有人知道怎么做

PS:如果您想用更好的方法保存
$\u POST
值,请告诉我

代码:

我在寻找一条干净的路

我想做一个STD对象

这些句子是相互排斥的。若你们想让它变得干净,那个么就为那个些数据创建你们自己的类,并使用Hyderator来填充它

我不知道你到底想把它存到哪里,但你有很多选择。例如,可以序列化对象

如果你想用“数组方式”来实现它,那么你可以使用这个简单的函数

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

我在寻找一条干净的路

我想做一个STD对象

这些句子是相互排斥的。若你们想让它变得干净,那个么就为那个些数据创建你们自己的类,并使用Hyderator来填充它

我不知道你到底想把它存到哪里,但你有很多选择。例如,可以序列化对象

如果你想用“数组方式”来实现它,那么你可以使用这个简单的函数

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

您可以创建一个类

<?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;
  }
}
您可以创建一个类

<?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;
  }
}

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

使用存根进行黑客攻击可能是一种方法,但它会影响整个代码库

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

…并在这里和那里提供一些提示:

/** @var MandatoryPost $mandatory */
$mandatory->
然而,这感觉像是完全的矫枉过正。首先,之所以使用
stdClass
,唯一的原因是您对其他程序性代码执行了可疑的JSON序列化。如果要使用对象进行验证,请创建一个适当的类来处理整个问题:

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

。。。或者一直使用普通数组。

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

使用存根进行黑客攻击可能是一种方法,但它会影响整个代码库

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

…并在这里和那里提供一些提示:

/** @var MandatoryPost $mandatory */
$mandatory->
然而,这感觉像是完全的矫枉过正。首先,之所以使用
stdClass
,唯一的原因是您对其他程序性代码执行了可疑的JSON序列化。如果要使用对象进行验证,请创建一个适当的类来处理整个问题:

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

。。。或者一直使用普通数组。

您是在问如何验证传入的数据吗?现在还不清楚你想要达到什么目的。@ADyson更新了帖子,把“主要问题”用粗体字写了出来。没错,这是一个关于IDE的问题。但是为什么不先声明一个对象/类,而不是一个数组呢?我猜它不会自动完成,因为它不是基于其他硬编码的可编译代码。相反,您通过执行一些代码而不是编写代码来创建一个对象-编译器将无法知道执行的结果(即使在这种情况下它是可预测的)。因为我想循环数组的真值,所以我不必每次都使用if(isset),所以我只需执行foreach($key=>$value)即可{if(isset($value)){return true}}除非您首先将它声明为一个具体的类。顺便说一句,您可以很容易地循环类的属性,因此实际上不需要从数组开始。您是否在问如何验证传入的数据?您不太清楚要实现什么。@ADyson更新了文章,提出了“主要问题”用粗体表示。没错,这是一个关于IDE的问题。但是为什么不声明一个对象/类来代替数组呢?我猜它不会自动完成,因为它不是基于其他硬编码的可编译代码。相反,你是通过执行一些代码来创建对象,而不是编写它-编译器无法知道执行的结果(即使在这种情况下它是可预测的)。因为我想循环数组的真值,所以我不必每次都使用if(isset),所以我只需执行foreach($key=>$value)即可{if(isset($value)){return true}除非你首先将它声明为一个具体的类。顺便说一句,你可以很容易地循环一个类的属性,因此实际上不需要从数组开始。谢谢!我喜欢这个主意。但我也希望以后能够使用变量。这就是为什么我要声明一个数组,所以我甚至可以使用:$mandatory->firs吗t_name=stripslashes($mandatory->first_name);$mandatory->last_name=stripslashes($mandatory->last_name);$mandatory->first_name=htmlspecialchars($mandatory->first_name);$mandatory->last_name=htmlspecialchars($mandatory->last_name);这是可行的!但它不是自动完成的。。那就不要使用stdClass,而是创建一个类,然后从$\u postThank的vars comming中填充它。我喜欢这个主意。但我也希望以后能够使用变量。这就是为什么我要声明一个数组,s