Как вывести значение массива из объекта в одну строку? - PullRequest
0 голосов
/ 24 ноября 2011

Если у меня есть, например, следующий класс:

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 ]

2 голосов
/ 24 ноября 2011

До 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);

где позиция - целое число.

1 голос
/ 24 ноября 2011

Вы можете добавить параметр, который может служить индексом для того, какой элемент возвращать, как показано ниже. Добавление другого метода с именем типа 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...