PHP:如何动态添加到http_build_query?

标签 php http arrays

我基本上有一个抓取对象。我希望能够像这样向它添加 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/

相关文章:

php - header 已发送 - 从 PHP 中的函数下载文件

php - 排队包含 PHP 变量的 WP 脚本

php - 匹配前后的正则表达式分割位置

json - 从有 Angular 的 ui-modal 发出发布请求

arrays - Bash 中的多维数组

javascript - 将 JSON 的 php 字符串(带引号)传递给 onclick 函数

http - 浏览器如何能够恢复下载?

http - yum 安装遇到 HTTP 403 错误?

java - 如何创建一个在调用时创建新帐户的对象数组?

PHP foreach 语句引用 : unexpected behaviour when reusing iterator