Php 使用static方法仅获取List()中的第一个值,但使用out static方法获取完整值

Php 使用static方法仅获取List()中的第一个值,但使用out static方法获取完整值,php,static,non-static,Php,Static,Non Static,在我的display()方法中,使用static initPost()设置值,使用static getAll获取所有值,使用static get('email')方法获取单个值。当我使用var_dump()进行检查时,一切正常。我想在我的列表中获取我的值()。但我只获取每个值的第一个字符串。但当我在列表()中没有使用out static方法获取完整值时,会出现什么问题 public function display() { echo "<pre>"; Form::in

在我的display()方法中,使用static initPost()设置值,使用static getAll获取所有值,使用static get('email')方法获取单个值。当我使用var_dump()进行检查时,一切正常。我想在我的列表中获取我的值()。但我只获取每个值的第一个字符串。但当我在列表()中没有使用out static方法获取完整值时,会出现什么问题

public function display()
{
    echo "<pre>";
    Form::initPost());//initializing value
    var_dump(Form::getAll());//Getting all value
    var_dump(Form::get('email'));//getting only email value

    list($name,$email,$pass,$rpass,$phone)=Form::getAll();//taking value to list

    var_dump($name);//Here is the problem .only getting first string from full name
}
//这是输出部分

public static function get($value){

    return array_key_exists($value,self::$value) ? self::$value[$value] : false;
}

发生这种情况的原因是,通过调用
get('email')
,您已删除$values数组,并将其设置为一个字符串,其中包含post请求中的电子邮件字段。通过对字符串调用
list()
,它会将字符串的每个字符放入列表中。通过回显列表的第一项,您将获得第一个字符

不应在get方法中覆盖表单::$value。 取而代之的是从表单中获取数组键::$value,如下所示:

public static function get($value){

    self::$value[$value] = $_POST[$value];

    return self::$value[$value];
}
$name = Form::get('name');
$email = Form::get('email');
$pass = Form::get('pass');
$rpass = Form::get('rpass');
$phone = Form::get('phone');
$all = Form::getAll();
echo $all['email'];
echo $all['phone']; // and so on
或者至少只设置请求的索引,如下所示:

public static function get($value){

    self::$value[$value] = $_POST[$value];

    return self::$value[$value];
}
$name = Form::get('name');
$email = Form::get('email');
$pass = Form::get('pass');
$rpass = Form::get('rpass');
$phone = Form::get('phone');
$all = Form::getAll();
echo $all['email'];
echo $all['phone']; // and so on
您不应该使用list()获取变量。请这样做:

public static function get($value){

    self::$value[$value] = $_POST[$value];

    return self::$value[$value];
}
$name = Form::get('name');
$email = Form::get('email');
$pass = Form::get('pass');
$rpass = Form::get('rpass');
$phone = Form::get('phone');
$all = Form::getAll();
echo $all['email'];
echo $all['phone']; // and so on
或者干脆做:

class Form  {

  private static $value = array();

  public static function initPost($expectValues = false){

      if($expectValues && !count($_POST)){
          throw new \Exception ("POST does not have any values");
      }
      self::$value = $_POST;
  }

  /**
    * use get() to grab all the values or get('key') to grab selected     
    *  value
    * @return mixed|array
    * @throws \Exception
   **/

  public static function get($value = null){

    if($value === null){
        return self::$value;
    }

    if(!array_key_exists($value,self::$value){
        throw new \Exception ("Could not find $value");
    }

    return self::$value[$value];
 }

 public function getByPosition($position){
     return implode(array_slice($array, $position, 1));
 }

}
也许这有帮助


静态表单和非静态表单的
var_dump
->getAll()之间有什么区别?我不明白你的问题@raheelpost你表单的代码做一个
var_dump(表单::getAll())
并将其粘贴到问题中。您正在您的
Form::get()
方法中覆盖
Form::$value
,因此您在
Form::initPost()
中所做的一切都将消失。我已经尝试了这两种解决方案。它会给我未定义的偏移量:我列表上的4 3 2 1 0()@stevenbe小心处理列表。我建议通过
Form::get()
而不是使用list()获取每个字段。如此处所述,list()仅适用于数值数组,并假设数值索引从0开始。我不明白。我已经在使用Form:get()获取我的值,但我需要将我的值存储在其他数组中。list用于从数组中提取字段。您试图从
getAll()
返回的数组中提取字段,该数组是具有非数字索引的关联数组。这就是失败的原因。好的,那么你能为我写一个解决方案吗@stevenI我已经尝试了你的解决方案。它也给了我未定义的偏移量:4 3 2 1 0在我的列表上()@Rx SevenI已经更新了我的解决方案,以为你想得到按键搜索的值。。。如果要获取第0个元素,现在可以使用getByPosition(0)获取数组的第一个元素。如果元素不在数组中,它将返回空字符串(“”)。