我目前正在测试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()
- 内部使用