如果我有以下课程:
class Test {
private $field = array();
function __construct($field) {
$this->field = $field;
}
public function setField($field) {
$this->field = $field;
}
public function getField() {
return $this->field;
}
}
我创建了这个类的实例:
$simpleArray = (1, 2, 3, 4);
$simpleTest = new Test($simpleArray);
如何在一行中打印simpleArray [2]的值?我知道这个解决方案:
$saveArray = $simpleTest->getField();
echo $saveArray[2];
我想知道如何在getField()之后直接访问数组值,这样我就不必将数组保存到变量:
echo $simpleTest->getField()->....?
答案 0 :(得分:2)
在PHP 5.4之前,您无法使用取消引用,因此您无法使用$this->$simpleTest->getField()[position]
。所以,目前,您可以创建一个这样的方法:
public function getElement($index) {
if ($index >= 0 && $index < count($this->field))
return $this->field[$index];
else
return null;
}
然后你可以打电话
echo $simpleTest->getElement(position);
其中position是一个整数。
答案 1 :(得分:1)
您可以添加一个参数,该参数可以作为返回项目的索引,如下所示。添加另一个名为fieldAt($index)
的方法可能是另一种解决方案。
public function getField($index = null) {
if($index != null)
{
return $this->field[$index];
}
return $this->field;
}
$saveArray = $simpleTest->getField(2); // get the 3rd element in the array
另一种解决方案可能是实现ArrayAccess
接口,这将允许您在对象上使用数组访问运算符([]
):
class Test implements ArrayAccess{
private $field = array();
function __construct($field) {
$this->field = $field;
}
public function setField($field) {
$this->field = $field;
}
public function getField() {
return $this->field;
}
public offsetExists($offset)
{
return isset($this->field[$offset]);
}
public offsetGet($offset)
{
if($this->offsetExists($offset))
{
return $this->field[$offset];
}
return null;
}
public void offsetSet($offset, $value) { } // Can implement this method, if desired
public void offsetUnset($offset ) { } // Can implement this method, if desired
}
$testObj[2]; // get the 3rd element in the array