PHP: dinamik http_build_query eklemek nasıl?

3 Cevap php

Ben temelde bir kazıma nesnesi var. Ben gibi buna POST değişkenleri eklemek mümkün olmak istiyorum

$obj->addvar('Name', 'Value');

Ben şimdi ne var bu:

  function addvar($var, $val) {
    $postvars[] = Array($var=>$val); 
  }
  function initiate() {
    $this->q = $postvars;
  }
  if(!empty($this->post)) {
    $this->params = http_build_query($q);
  }

Ben çok eksik, çünkü test, Ama olur benim addvar () işlevi bir iş değil mi? Http_build_query bunu kabul ederim böylece yeryüzünde nasıl diziye bir anahtar + değer eklemek istiyorsun?

IE (bu istediğim budur):

$obj->addvar('username', 'abc');
$obj->addvar('password', 'foobar');
$obj->send(); //..

3 Cevap

Eğer kod birkaç sorunları var:

  • Lütfen addvar yöntemde, herhangi bir örnek değişkenleri erişen değildir. Yerel bir değişkene alues ​​atama.
  • Sizin initiate yöntemi değişkene erişemezsiniz $postvar.
  • if fıkrasında yerel bir değişken $q yerine örnek değişkeni $this->q erişen.
  • Sen http_build_query için dizilerin bir dizi geçmek istiyorum ama "normal" bir dizi olması vardır.

Sen bir sürü karıştırma!

Kendi sınıfının daha eksiksiz bir örnek yararlı olacaktır, ama ben daha fazla bu gibi bakmak gerektiğini düşünüyorum:

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;
    }
}

Örnek:

$obj = new QueryBuilder();
$obj->addParameter('username', 'abc');
$obj->addParameter('password', 'foobar');
echo $obj->send(); // echos 'username=abc&password=foobar'

Zaten tarafından inşa edilmiş sorgu varsa, genel olarak, html_build_query sadece bu dizeyi ekleyebilirsiniz:

$query = http_build_query(array('foo' => 'bar', 'faa' => 'baz'));
$query .= '&key=value';
echo $query; // echos 'foo=bar&faa=baz&key=value'

Sen yapabilirsin:

$postvars[$var] = $val;

Açıkçası tüm değerler dizideki sonra emin http_build_query() arama yapmak gerekir.

Ayrıca $postvars, bir yerel değişken gibi görünüyor, bu yüzden bu yöntemi içinde sadece görünür (ve her aramada sıfırlanır). Muhtemelen bu sınıfın bir üyesi yapmak için daha iyi olurdu.

Sen burada addvars kodu ile bazı sorunlar var ($ this-> params fonksiyonu dışında görünüyor) (başlatmak), ama aksi takdirde iyi çalışması gerekir.

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();

Bu çalışması gerekir. Olsa denenmemiş.