【发布时间】:2016-11-17 19:42:40
【问题描述】:
错误信息是:
致命错误未捕获错误:无法使用字符串键解包数组
我知道我可以简单地运行方法fetch() 两次并传递['q'] 和['bind'],但我正在尝试使用新的... 来解压值。我想像这样传递值:
(string) SQL, (Array) Bind Values
但我认为它会尝试从 fetch() 方法解压缩绑定值数组以及响应数组。可以解压这个数组吗?
看起来像这样:
array(2) {
["q"] => string(7) "example"
["bind"] => array(1) {
["example"] => string(3) "one"
}
}
这是整个代码,以防您需要查看它们是如何组合在一起的:
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 content here')->bind(['example' => 'example value here']), 'one');
$m->exec_all();
【问题讨论】:
-
做一个
$values = array_values($q->fetch()); ModelController::execute(...$values) -
这完全奏效了!您能否回答
array_values()在这种情况下与拆包相关的工作?将不胜感激@apokryfos
标签: php arrays argument-unpacking