我基本上有一个抓取对象。我希望能够像这样向它添加 POST 变量
$obj->addvar('Name', 'Value');
我现在拥有的是:
function addvar($var, $val) {
$postvars[] = Array($var=>$val);
}
function initiate() {
$this->q = $postvars;
}
if(!empty($this->post)) {
$this->params = http_build_query($q);
}
我还没有测试,因为它太不完整,但是我的 addvar() 函数可以工作吗?我究竟如何将键+值附加到数组以便 http_build_query 接受它?
IE(这就是我想要的):
$obj->addvar('username', 'abc');
$obj->addvar('password', 'foobar');
$obj->send(); //..
最佳答案
您的代码中有几个问题:
- 在您的
addvar
方法中,您没有访问任何实例变量。您正在将值分配给局部变量。 - 您的
initiate
方法无法访问变量$postvar
。 - 在
if
子句中,您正在访问局部变量$q
而不是实例变量$this->q
。 - 您想将一组数组传递给
http_build_query
,但必须是“普通”数组。
你搞混了很多!
你的类的一个更完整的例子会很有帮助,但我认为它应该看起来更像这样:
class QueryBuilder {
private $params = array();
public function addParameter($key, $value) {
$this->params[$key] = $value;
}
public function send() {
$query = http_build_query($this->params);
// whatever else has to be done to send.
// for the sake of this example, it just returns the query string:
return $query;
}
}
例子:
$obj = new QueryBuilder();
$obj->addParameter('username', 'abc');
$obj->addParameter('password', 'foobar');
echo $obj->send(); // echos 'username=abc&password=foobar'
一般来说,如果您已经有了由 html_build_query
构建的查询,您可以只附加到该字符串:
$query = http_build_query(array('foo' => 'bar', 'faa' => 'baz'));
$query .= '&key=value';
echo $query; // echos 'foo=bar&faa=baz&key=value'
关于PHP:如何动态添加到http_build_query?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2606834/