如何在一行中从对象打印数组值?

时间:2011-11-23 23:25:13

标签: php arrays object

如果我有以下课程:

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()->....?

2 个答案:

答案 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