Assign函数不将数组分配给对象

时间:2019-02-02 14:10:03

标签: php

我一直在注册系统上工作,现在正在做注册部分,但是我不断收到诸如“用户名”之类的错误,不能为null或数据库字段中的其他错误。

在进行一些调试之后,我发现如果我尝试显示参数,则可以通过函数调用该函数。

函数调用:

        $newUser->registerNewUser($_POST);

为了调试,我创建了一个称为dnd的基本功能

 function dnd($data) //debug function
 {
  echo '<pre>';
 var_dump($data);
  echo '</pre>';
    die();
 }

然后,我们有了注册新用户功能

 public function registerNewUser($params)
  {

     $this->assign($params);
       dnd($params);
    $this->deleted = 0;
    $this->password = password_hash($this->password, PASSWORD_DEFAULT);
    $this->save();
  }

dnd($ params)向我返回:

   array(6) {
     ["fname"]=>
     string(8) "Fnamegood"
      ["lname"]=>
       string(9) "Lnamegood"
      ["email"]=>
  string(18) "email@gmail.com"
  ["username"]=>
  string(8) "infernus"
  ["password"]=>
  string(7) "workingpassword"
  ["confirm"]=>
  string(7) "workingpassword"
    }

在分配之后,该数组为空。

分配前:

object(Users)#13 (16) {
  ["_isLoggedIn":"Users":private]=>
  NULL
  ["_sessionName":"Users":private]=>
  string(21) "GJdsadaHsdahgFGDasdaS"
  ["_cookieName":"Users":private]=>
  string(24) "nfbfbfafusibfsau548a484f"
  ["id"]=>
  NULL
  ["username"]=>
  NULL
  ["email"]=>
  NULL
  ["password"]=>
  NULL
  ["fname"]=>
  NULL
  ["lname"]=>
  NULL
  ["acl"]=>
  NULL
  ["deleted"]=>
  NULL
  etc .. 

分配后,它看起来像

object(Users)#13 (17) {
  ["_isLoggedIn":"Users":private]=>
  NULL
  ["_sessionName":"Users":private]=>
  string(21) "GJdsadaHsdahgFGDasdaS"
  ["_cookieName":"Users":private]=>
  string(24) "nfbfbfafusibfsau548a484f"
 ["id"]=>
  NULL
  ["username"]=>
  NULL
  ["email"]=>
  NULL
  ["password"]=>
  NULL
  ["fname"]=>
  NULL
  ["lname"]=>
  NULL
  ["acl"]=>
  NULL
  ["deleted"]=>
  NULL
 etc..

分配函数看起来像

 public function assign ($params)
     {
       if(!empty($params))
       {
        foreach ($params as $key => $val)
        {
          if(in_array($key, $this->_columnNames))
          {
            $this->key = sanitize($val);
          }
        }
        return true;
        }
        return false;
     }

然后消毒

function sanitize($dirty)
{
   return htmlentities($dirty, ENT_QUOTES , 'UTF-8');
}

3 个答案:

答案 0 :(得分:2)

分配功能出错 应该是这样

public function assign($params)
      {
        if(!empty($params)) {
          foreach($params as $key => $val) {
            if(property_exists($this,$key)){
              $this->$key = sanitize($val);
            }
          }
          return true;
        }
        return false;
    }

答案 1 :(得分:0)

您需要在$ this-> key行中读取$ this-> $ key

假设$ this-> _ columnNames存在并且具有值等...

答案 2 :(得分:0)

如果$ params是带有'is_array'函数的数组,则可以检查。

import ...
public class MainClient {
    private Socket serverSock;
    private PrintStream clientOutput;

    public static void main(String[] args) {
        MainClient client = new MainClient();
        client.runClient();
    }
    public void runClient() {
        try {
            serverSock = new Socket("127.0.0.1",8282);
            clientOutput = new PrintStream(serverSock.getOutputStream());
            clientOutput.println("Hello, I'm Connected.");

            for (int i=0;i<5;i++) {
                clientOutput.println(i + "");
                clientOutput.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
//          try {
//              serverSock.close(); It will keeps sending 'null' data to the server if I use this line.
//          } catch (IOException e) {
//              e.printStackTrace();
//          }
        }
    }
}