FATAL ERROR Uncaught Error: Cannot unpack array with string keys
I know I can simply run the method fetch()
twice and pass the ['q']
and ['bind']
but I am trying to get to grips with using the new ...
to unpack values. I want to pass the values like so:
(string) SQL, (Array) Bind Values
But I think it tries to unpack the bind values array as well as the response array from the fetch()
method. Is it possible to unpack this array (looks something like this:)
array(2) {
["q"]=> string(7) "example"
["bind"]=> array(1) {
["example"]=> string(3) "one"
}
}
This is the whole code, in-case you need to see how it all fits together:
class ModelController {
public static function execute($sql, $vals) {
var_dump($vals);
}
}
class ModelContainer {
private $queries = [];
public function add_model(Model $model, $name) {
$this->queries[$name] = $model;
return $this;
}
public function exec_all() {
foreach($this->queries as $q) {
ModelController::execute(...$q->fetch());
}
}
public function exec($name) {
}
}
class Model {
private $sql;
private $vals = [];
public function set_q($statement) {
$this->sql = $statement;
return $this;
}
public function bind($vals = []) {
$this->vals = $vals;
return $this;
}
public function fetch() {
return ['q' => (string)$this->sql,
'bind' => $this->vals ];
}
}
$m = new ModelContainer();
$m->add_model((new Model)->set_q('example sql here')->bind(['example' => 'example value here']), 'one');
$m->exec_all();
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…