[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: eval(), не колхоз ли делать такую конструкцию?
Страницы: 1, 2
GET
xlebosol
+...завтра буду уже разбираться что такое
Цитата
$it = new RecursiveIteratorIterator( new RecursiveArrayIterator($str2));

blink.gif

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
GET
Всем большое спасибо.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
GET
Читаю про итераторы вот создал пример:

$input = array(1, 2, 3, 4, 5);
$a= new ArrayObject($input);
$count = $a->count();
echo 'Через итератор:'.$count.'<br>Обычно:'.count($input);



Я не могу понять когда их применять. Может пример превел неудобный, можете объяснить по опыту, когда их применять предпочтительнее?

Прочитал, что во время:

$a= new ArrayObject($input);


в отличии от foreach не делается копия массива в памяти, что как-бы легче, но тем не менее задействует весь этот огромный класс. Т.е. как я понимаю бессмысленно его задействовать для небольших массивов.

Спасибо.


_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
kaww
ABC
, ArrayObject не является итератором, он позволяет работать с объектом как с массивом.
Простой пример:
Есть гараж (Garage), в который можно парковать автомобили (car). Мы бы хотели, что бы гараж можно было обходить в цикле и получать автомобили, так же нужно знать сколько автомобилей в гараже, и должен быть въезд в этот гараж (park)

/**
* Класс, описывающий автомобиль
* Class car
*/

class Car
{
public $brand;

public function __construct($brand)
{
$this->brand = $brand;
}
}


/**
* Гараж в который можно припарковать автомобиль
* Class garage
*/

class Garage extends ArrayObject
{
public $cars = array();

public function park(Car $car)
{
$this->append($car);
}

public function getIterator()
{
$iterator = new ArrayIterator($this->cars);
return $iterator;
}

public function append($car)
{
$this->cars[] = $car;
}

public function count()
{
return count($this->cars);
}

public function getArrayCopy()
{
return $this->cars;
}
}


$garage = new Garage();
$bmw = new Car('BMW');
$garage->park($bmw);
$audi = new Car('Audi');
$garage->park($audi);
$garage->park(new Car('Mercedes'));

/** @var Car $car */
foreach ($garage as $car) {

var_dump($car->brand);
}


По сути ArrayObject имеет реализацию интерфейсов IteratorAggregate , Traversable , ArrayAccess , Serializable , Countable. Т.е. Garage можно объявить так:
Garage implements IteratorAggregate , Traversable , ArrayAccess , Serializable , Countable
и реализовать эти интерфейсы. Хотя в приведенном примере это все равно нужно сделать. т.к. реализация в ArrayObject теперь работает не верно ;)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.