我基本上有一个抓取对象。我希望能够像
一样添加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(); //..
答案 0 :(得分:2)
您的代码中有几个问题:
addvar
方法中,您无法访问任何实例变量。您将alues分配给局部变量。 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'
答案 1 :(得分:1)
你可以这样做:
$postvars[$var] = $val;
显然,您需要确保在所有值都在数组中后调用http_build_query()
。
同样$postvars
看起来像一个局部变量,所以它只在该方法中可见(并且将在每次调用时重置)。让它成为班级成员可能会更好。
答案 2 :(得分:0)
你的addvars代码存在一些问题($ this-> params似乎在函数initiate()之外),但是否则它应该可以正常工作。
class test{
var $postvars;
function addvar($var, $val) {
$this->postvars[] = Array($var=>$val);
}
function initiate() {
$this->q = $this->postvars;
return http_build_query($this->q);
}
}
$obj = new test();
$test->addvars('username', 'abc');
$qry = $test->initiate();
这应该有效。虽然未经测试。