无法访问ZF2请求对象的某些属性


Unable to access certain properties of the ZF2 request object

我目前正在测试ZF2 beta4,从控制器访问一些请求属性时遇到一些问题。

indexAction()内部,以下是我为请求对象获得的内容的摘录

var_dump($this->request);给我:

object(Zend'Http'PhpEnvironment'Request)#119 (14) {
  ["baseUrl":protected]=>
    string(0) ""
  [...]
  ["version":protected]=>
    string(3) "1.1"
  ["queryParams":protected]=>
    object(Zend'Stdlib'Parameters)#122 (1) {
      ["storage":"ArrayObject":private]=>
      array(3) {
        ["q"]=>
        string(0) ""
        ["param1"]=>
        string(6) "value1"
        ["param2"]=>
        string(6) "value2"
      }
    }

我可以访问某些属性:
var_dump($this->request->getBaseUrl());->string(0) ""
var_dump($this->request->getVersion());->string(3) "1.1"

但我与其他人有问题,例如$this->request->getQueryParams()返回:

对未定义方法的调用Zend''Http''PhpEnvironment''Request::getQueryParams()

从那里我有几个问题:
-我做错什么了吗
如果不是:
-如何访问queryParams属性
-没有访问某些属性的方法是常见的做法吗(如果是,如果我不能访问这些属性,那么拥有这些属性有什么意义?)

您转储的所有属性都受到保护,这就是为什么您需要一个getter来获取它们的值。

某些属性的现有getter并不意味着它们适用于所有属性:)

如果您查看Zend'Http'Request的源(由Zend'Http'PhpEnvironment'Request继承),您可以看到用于访问查询参数的方法名称是query()

注意:我同意这有点不一致。

警告:自测试版5以来已更改,现在为getQuery()

受保护的成员和私有成员用于确保数据不会被直接访问。

它大多只用于内部使用,或者提供了一个公共的setter/getter来允许转换、错误检查等。

例如,您可能希望添加类型提示。

class Car {
    public $engine;
}
$car = new Car();
$car->engine = new Truck();
// Having a public member doesn't allow me to check for valid type (I don't want a `Truck` to be set in place of an `Engine`)
class Car {
    private $engine;
    public setEngine(Engine $engine)
    {
        $this->engine = $engine;
        // Add additional code here
        $this->engine->warmUp();
    }
}
// Here I use type hinting to ensure validity of data, I also warmUp the Engine just after setting it.
  • getQuery()
  • 内部使用