[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Нужна конструктивная критика кода
Tom
Задание было такое
Средствами PHP и с использованием ООП (php version > 5.3) создать реализацию следующего интерфейса:
https://gist.github.com/lazycommit/5626511
Приветствуется php>5.4.1
В результате реализации интерфейса должно быть возможным корректное использование следующего кода.
https://gist.github.com/lazycommit/5626797



В результати некоторых мысленных потуг у меня получился такой код:
<?php

interface
ArrayHelperInterface extends
IteratorAggregate,
ArrayAccess,
Countable {

/**
*
@param ArrayHelperInterface|ArrayObject|array $array
*/

function __construct($array);

/**
* Creates a new array with the results of calling a provided function on every element in the ArrayHelperInterface.
*
@param $callback
*
@return ArrayHelperInterface
*/

public function map($callback);

/**
* Calls a function for each element in the ArrayHelperInterface.
*
@param $callback
*
@return void
*/

public function each($callback);

/**
* Returns true if at least one element in the array satisfies the provided testing function.
*
@dev must finish iteration after first matching
*
@param Closure|string $callback
*
@return boolean
*/

public function some($callback);

/**
* Returns true if every element in the array satisfies the provided testing function.
*
@param Closure|string $callback
*
@return boolean
*/

public function every($callback);
}

class ArrayHelper implements ArrayHelperInterface
{
public $array;
//public $container;
public function __construct($array) {
$this->array = $array;

}

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

}

public function each($callback) {
foreach ($this->array as $key => $value)
$callback($key, $value, $this);
}

public function every($callback) {
foreach ($this->array as $key => $value ) {
if(!$callback ( $key, $value, $this )) {
return false;
}
}

return true;
}
public function some($callback) {
$flag = false;
foreach ($this->array as $key => $value)
{
if ($callback($key, $value, $this))
$flag = true;
}
return $flag;
}
public function getIterator() {
return new ArrayIterator($this->array);

}

public function map($callback) {
foreach ($this->array as $key => $value )
$callback ( $key, $value, $this );
return $this->array;
}

public function offsetSet($offset, $value) {
if (is_null($offset)) {
$this->array[] = $value;
} else {
$this->array[$offset] = $value;
}
}

public function offsetExists($offset) {
return isset($this->array[$offset]);
}
public function offsetUnset($offset) {
unset($this->array[$offset]);
}
public function offsetGet($offset) {
return isset($this->array[$offset]) ? $this->array[$offset] : null;
}


}


$array = array('_0' => 0);

$array = new ArrayHelper($array);

$func = function ($key, $value, ArrayHelperInterface $array) {
static $i;
$i++;
$c = count($array);
if (is_string($key) && $c < $value) {
unset($array[$key]);
return true;
} else {
$array['_'.$i] = --$c;
return false;
}
}
;

$array->each($func);

var_dump(iterator_to_array($array));
echo "<br>";
/*
array(2) {
'_0' =>
/'_1' =>
int(0)
}
*/


$array->some($func);
var_dump(iterator_to_array($array));
echo "<br>";
/*
array(4) {
'_0' =>
int(0)
'_1' =>
int(0)
'_2' =>
int(1)
'_3' =>
int(2)
}
*/


$array->every($func);

var_dump(iterator_to_array($array));
echo "<br>";

/*
array(5) {
'_0' =>
int(0)
'_1' =>
int(0)
'_2' =>
int(1)
'_3' =>
int(2)
'_4' =>
int(3)
}
*/

?>


Код работает корректно и даже отдает то что мне нужно :) но поскольку программист я еще только начинаю, я прекрасно понимаю что профессионалы данный код вполне могли написать более корректно и красиво. Поэтому прошу Вас хоть одним глазком просмотреть этот код и возможно подсказать что именно в нем стоит понять.
Заранее спасибо.
Быстрый ответ:

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