Оцените тестовое задание при устройстве на работу

cherkashin-vova

Новичок
Оцените тестовое задание при устройстве на работу

Всем добрый вечер! Кризис коснулся всех, меняю работу, прохожу собеседование. 3 задания выполнил без труда. Последнее задание показываю на суд общественности:
---------------
Реализовать класс Collection, который бы хранил в виде ассоциативного массива набор данных. Предполагается, что у данного класса есть всего два метода set(name, value) и get(name). Также, помимо этого, нужно реализовать класс CollectionIterator и интерфейс Iterator в соответствии с паттерном Iterator. После создания вышеперечисленного нужно сделать какой-нибудь пример, показывающий работу данных классов.
---------------
С паттерном итератор в индексированном массиве все абсолютно понятно, но в ассоциативном массиве, я даже представить не могу его реализацию. Ведь в нем данные не упорядочены и доступ к ним осуществляются по ключам. В данном задание как мне кажется, создается объект типа Collection, вносим туда несколько значений с определенными ключами. Каким образом класс CollectionIterator может узнать о том, под какими ключами хранятся объекты, не говоря уже об их последовательности. Что кто по этому поводу думает, может кто то знает как это возможно сделать?
 

phprus

Moderator
Команда форума
cherkashin-vova
Подумай, как работает foreach с ассоциативными массивами.
 

cherkashin-vova

Новичок
Дело в том, что в данном примере массив хранится в классе Collection, с полем доступа private. У этого класса два метода set(name, value) и get(name). Т.е. из класса CollectionIterator я не могу обратится к массиву, я могу лишь получить значение по определенному ключу, о которых класс CollectionIterator не имеет ни какого представления.
 

x-yuri

Новичок
cherkashin-vova тебе его надо вручную реализовать? без использования всяких php-интерфейсов, объектов?
 

cherkashin-vova

Новичок
Вот код класса Collection:
PHP:
	class Collection
	{		
		private $list;		
		function __construct() {
			$this->list = array();
		}
		
		function set($name,$value){
			$this->list[$name]=$value;
		}	
			
		function get($name)		{
			return $this->list[$name];
		}						
	}
Как мне кажется никаие стандартные интерфейсы мне не помогут, доступ к массиву я не имею, могу лишь только обратится по двум методам, get и set.
Вообщем походу задание я провалю или его реализация с данными условиями невозможна.
 

HraKK

Мудак
Команда форума
Тупое задание если его задают сделать без доступа к php.net.
Я бы не решил.
 

cherkashin-vova

Новичок
BRat по условию: "класс Collection ..... у данного класса есть всего два метода set(name, value) и get(name)".
 

cherkashin-vova

Новичок
Все! Письмо отправил, написал что это задание решить с данными условиями не возможно. Буду ждать результатов!
 

Духовность™

Продвинутый новичок
90% тестовых заданий пишутся идиотами и дебилами. Особенно бесит когда меня проверяют на какую-нибудь пхповскую фитчу, связанную с синтаксисом.
 

BRat

o_0
x-yuri
нормальным его можно назвать только в пятницу вечером, предварительно выпивши :)
 

x-yuri

Новичок
нормальным его можно назвать только в пятницу вечером, предварительно выпивши
я уже об этом думал)) имелось в виду по сравнению с парсингом var_dump и в контексте устройства на работу
 

HraKK

Мудак
Команда форума
Я думаю если он знает слово Reflection то уже стоит брать.
А если он вкурит решение с рефлексией что я писал для gMulticurl думаю, думаю 2 руками стоит)
 

A1x

Новичок
а как с Reflection? там я вижу такое
PHP:
class ReflectionProperty implements Reflector
{
public void setAccessible() /* As of PHP 5.3.0 */
}
но в пятницу вечером можно такой "грязный хак"
PHP:
static function getPrivateProperty($obj, $name) {
        $a = (array)$obj;
        $key = "\0".get_class($obj)."\0".$name;
        return $a[$key];
    }
 
Сверху